问题描述
如其他答案所述,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); } }
@H_403_19@解决方法
我有一个问题。
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。这是为什么?