Ответ 1
Как сказано в других ответах, Java выполняет только call-by-value, а оператор ++
обрабатывает только переменную, а не объект. Если вы хотите симулировать call-by-reference, вам нужно передать изменяемый объект, например массив, и изменить его элементы.
Java API имеет для этого несколько специализированных объектов, таких как java.util.concurrent.atomic.AtomicInteger
(который также работает и над несколькими потоками) и org.omg.CORBA.IntHolder
(используется для вызова по ссылке для удаленных вызовов с помощью механизма CORBA).
Но вы также можете просто определить свое собственное изменяемое целое число:
class MutableInteger {
public int value;
}
class C {
public C(int[] i) {
++i[0];
}
}
class D {
public D(MutableInteger i) {
++i.value;
}
}
class E {
public E(AtomicInteger i) {
i.incrementAndGet();
}
}
public class Jaba {
public static void main(String args[]) {
int[] iii = new int[]{ 0 };
System.out.println(iii[0]);
new C(iii);
System.out.println(iii[0]);
MutableInteger mi = new MutableInteger();
System.out.println(mi.value);
new D(mi);
System.out.println(mi.value);
MutableInteger ai = new AtomicInteger(0);
System.out.println(ai);
new E(ai);
System.out.println(ai);
}
}