Передача примитивов по ссылке

Допустим, имеется int x = 12;. Есть ли возможность передать этот примитив по ссылке? Раньше думал, что для этой цели стоит использовать Integer objX = Integer.valueOf(x); , который затем можно передать по ссылке какому-нибудь методу. Но после передачи objX методу, который, например, увеличивал значения на 1, objX как был равен 12, так и остается.


Ответы (1 шт):

Автор решения: Nowhere Man

Примитив по ссылке в Java передать нельзя, но можно создать класс-обёртку для примитива, и передавать ссылку на экземпляр такого класса. Integer для этого не подходит, так как он является неизменяемым.

public class MyInt {
    private int n;

    public MyInt(int n) { this.n = n; }

    public void setN(int m) { this.n = m; }
    public int getN() { return this.n; }

    public int preInc()  { return this.++n; }
    public int postInc() { return this.n++; }
}
MyInt mi = new MyInt(5);
foo(mi); // вызов метода, который изменит состояние
System.out.println(mi.getN()); // -> 6

static void foo(MyInt mi) {
    mi.preInc();
}

Другое дело, что минусов у такой реализации больше чем плюсов, самым главным из которых является потоконебезопасность и необходимость синхронизации при доступе к содержимому такого класса.

→ Ссылка