Передача примитивов по ссылке
Допустим, имеется int x = 12;. Есть ли возможность передать этот примитив по ссылке? Раньше думал, что для этой цели стоит использовать Integer objX = Integer.valueOf(x); , который затем можно передать по ссылке какому-нибудь методу. Но после передачи objX методу, который, например, увеличивал значения на 1, objX как был равен 12, так и остается.
Ответы (1 шт):
Примитив по ссылке в 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();
}
Другое дело, что минусов у такой реализации больше чем плюсов, самым главным из которых является потоконебезопасность и необходимость синхронизации при доступе к содержимому такого класса.