为什么变量s不会被2改变
public class Test {
static void getVal(int s) {
s= 2;
}
public static void main(String arg[]) {
int s = 0;
getVal(s);
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
正如Felix在评论中所说,在Java中,参数是通过值传递的.
如果我们使用不同的变量名称会更清楚:
public static void main(String arg[]) {
int x = 0;
method(x);
System.out.println(x); // Prints 0
}
static void method(int y) {
y = 2;
}
Run Code Online (Sandbox Code Playgroud)
当您调用时method(x),将x评估值,并且该值将成为其初始值y.这是两个变量之间的唯一联系.更改值y不会更改值x.
现在使用引用类型变量,它可能看起来好像不是这样:
public static void main(String arg[]) {
StringBuilder x = new StringBuilder();
method(x);
System.out.println(x); // Prints "appended"
}
static void method(StringBuilder y) {
y.append("appended");
}
Run Code Online (Sandbox Code Playgroud)
它看起来有点像你已经改变了的价值x-但你真的没有.的价值观x和y只是引用一个对象......都x和y指向同一个对象,而append呼叫改变了对象中的数据.我喜欢在这里使用的类比是房子:作为方法来电者,我可以给你一张纸,上面写着我的地址.那个地址相当于参考,而我的房子就是对象.
你可以改变两件事:
这些都没有改变"我居住的地方" - 我对"我的房子"的引用的副本与以前一样,无论你做了什么.
当涉及到类时的行为导致了一个常见的神话,即"Java通过值传递原语并通过引用传递对象" - 这简直是不真实的.Java 按值传递所有参数 - 但您需要了解表达式的值始终是原始值或引用,而不是对象.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |