为什么变量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);
}
}
答案 0 :(得分:2)
s
是getVal()
中的局部变量,它确实发生了变化 - 但仅限于getVal()
的{{3}}。
s
的值传递给getVal()
scope - 因此只会更改副本而不是原始副本。
答案 1 :(得分:2)
传递值为0的值s; 然后因为它是通过值传递的,所以在getVal内部创建一个新变量,该变量初始化为0.它获得分配的值2。 然后使用函数的结尾删除变量。
答案 2 :(得分:1)
参数按值传递。在方法getVal中,s是另一个生成的变量。更改对其他变量s没有影响。为了达到这个效果,您可以这样做:
public class Test {
static int getVal(int s) {
s= 2;
return s;
}
public static void main(String arg[]) {
int s = 0;
s = getVal(s);
System.out.println(s);
}
}
答案 3 :(得分:1)
参数是按值传递的,因此在getVal
中创建一个新的局部变量。为了解决这个问题,你应该返回值并在调用方法中赋值给变量。试试这个
public class Test{
static int getVal(int s){
s= 2;
return s;
}
public static void main(String arg[]){
int s = 0;
s = getVal(s);
System.out.println(s);
}
}
答案 4 :(得分:1)
这是因为java将值作为参数传递给方法。因此,当您调用函数getVal(s)而不是s时,它会传递s的值为0。
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
本文档将告诉您这个故事。
答案 5 :(得分:0)
Java通过引用操作对象,所有对象变量都是引用。但是,Java并没有通过引用传递方法参数;它按值传递它们。
以fun()
方法为例:
public void fun(int var1, int var2)
{
int temp = var1;
var1 = var2;
var2 = temp;
}
当fun()返回时,作为参数传递的变量仍将保持其原始值。如果我们将参数类型从int更改为Object,该方法也将失败,因为Java也会按值传递对象引用。