问题描述
如其他答案所述,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);
}
}
解决方法
我有一个问题。
public class Jaba {
public static void main(String args[]) {
Integer i = new Integer(0);
new A(i);
System.out.println(i);
new B(i);
System.out.println(i);
int ii = 0;
new A(ii);
System.out.println(ii);
new B(ii);
System.out.println(ii);
}
}
class A {
public A(Integer i) { ++i; }
}
class B {
public B(int i) { ++i; }
}
我认为将int \ Integer作为Integer传递给函数并对该引用进行++应该会更改基础对象,但是在所有情况下输出均为0。这是为什么?