变量无法更改

时间:2012-02-20 11:50:52

标签: java

为什么变量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);
  }
}

6 个答案:

答案 0 :(得分:2)

sgetVal()中的局部变量,它确实发生了变化 - 但仅限于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也会按值传递对象引用。