我有一个方法:
public static void MutableInt (int newValue) {
AtomicInteger atomicInteger;
atomicInteger = new AtomicInteger(10);
newValue = atomicInteger.get();
}
然后在main中调用:
int x=3;
MutableInt(x);
System.out.println("After invoking MutableInt method, x = " + x);
结果仍然是3。 是否有可能以这种方式改变int?
答案 0 :(得分:0)
不。无论您在mutableInt()
内执行什么操作,x
的值都会保留3
。更改它的唯一方法是使方法返回一个int并将其分配给x
,或将x
本身更改为可变对象(如AtomicInteger
)。
答案 1 :(得分:0)
不是真的。 Java参数是通过值而不是通过引用传递的,因此修改方法内的变量不会对在其外部声明的变量执行任何操作。 你可以做点什么
public static int MutableInt (int newValue) {
AtomicInteger atomicInteger;
atomicInteger = new AtomicInteger(10);
return atomicInteger.get();
}
int x = MutableInt(3);
System.out.println("After invoking MutableInt method, x = " + x);
答案 2 :(得分:0)
最重要的是,您将原语传递给方法,而不是对对象实例的引用。即使使用自动装配,如果将int变量设置为方法内的其他内容,由于您没有返回任何内容,因此不会更改方法范围之外的变量。
如果你传递了一个Integer对象,如果你在方法中更改了它,那么方法之外的Integer的值将被修改,只要它在方法的签名中不是最终的。
在方法中创建中间AtomicInteger并不重要,因为它只存在于方法的范围内。