Java基础 - 内部分配

时间:2015-08-25 15:46:33

标签: java

有人可以向我解释一下,因为我对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

4 个答案:

答案 0 :(得分:8)

您没有使用按引用或按值传递。在每种情况下都应该更改局部变量。

传递值仅适用于作为方法调用的参数传递的变量。

变量不会传递给嵌套范围,这些范围只有一个变量,更改它会改变原始范围。

复制的唯一时间是匿名内部类和lambdas,但这些变量需要有效最终。

答案 1 :(得分:2)

您没有将任何内容传递给整个代码中的任何位置。您只是将这些值重新分配给最初声明的变量。就是这样。

答案 2 :(得分:0)

"按值传递参考"指的是方法(函数)调用。你没有调用任何方法,所以这个概念毫无意义。

答案 3 :(得分:0)

到达范围块时,不会传递值。那将是一场噩梦。你会对if语句和for循环做什么?一切都会破裂。

您只在函数中传递值,然后按值传递引用