有人可以向我解释一下,因为我对Java相对较新并且来自Objective-c背景(不同的是,通过引用传递而不是按值传递(引用))。
鉴于Java是通过值传递的,我不应该期望能够在不同的范围内重新分配变量并保持这些更改,对吧?这就是为什么objectValue为null。 String和int是原语,这就是它们工作的原因。但是,为什么Integer有效?
Object objectValue = null;
int intValue;
String stringValue = null;
Integer integerValue = null;
if (true) {
objectValue = new Aircraft();
intValue = 1;
stringValue = "is one";
integerValue = new Integer(1);
}
// objectValue == null
// intValue == 1
// stringValue == "is one"
// integerValue == 1
答案 0 :(得分:8)
您没有使用按引用或按值传递。在每种情况下都应该更改局部变量。
传递值仅适用于作为方法调用的参数传递的变量。
变量不会传递给嵌套范围,这些范围只有一个变量,更改它会改变原始范围。
复制的唯一时间是匿名内部类和lambdas,但这些变量需要有效最终。
答案 1 :(得分:2)
您没有将任何内容传递给整个代码中的任何位置。您只是将这些值重新分配给最初声明的变量。就是这样。
答案 2 :(得分:0)
"按值传递参考"指的是方法(函数)调用。你没有调用任何方法,所以这个概念毫无意义。
答案 3 :(得分:0)
到达范围块时,不会传递值。那将是一场噩梦。你会对if
语句和for
循环做什么?一切都会破裂。
您只在函数中传递值,然后按值传递引用。