如其他答案所述,Java仅 按值调用 ,而
++运算符仅影响变量,而不影响对象。如果要模拟 按引用调用
,则需要传递一个可变对象(如数组)并修改其元素。
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); }}


