【发布时间】:2016-12-28 03:38:56
【问题描述】:
拥有Integer、Boolean 等并称它们为“...装箱”有什么意义?如果它们的行为不像装箱的对象,您可以通过“引用”传递并进行拆箱以更改它们的值?
这是一个“拆箱”的例子,我实际上发现它并不是真正的拆箱。
public static void main(String[] args) {
Boolean x = true;
foo(x);
System.out.println(x);
Integer num = 9;
bar(num);
System.out.println(num);
}
private static void bar(Integer num) {
num = 5;
}
static void foo(Boolean x){
boolean y = false;
x = y;
}
它打印 true 和 9 btw。
【问题讨论】:
-
Java 总是按值传递,没有例外。您正在更改方法内部的引用,这不会影响原始传递的值。还记得
Integer是不可变的。 -
但是
num = 5;不考虑拆箱吗?所以它改变了对象内部的值,并且对该对象的引用是相同的。 @MarounMaroun
标签: java reference pass-by-reference boxing unboxing