原始类型值更改

时间:2014-02-10 13:05:57

标签: java

我知道按值调用的原始类型(已发送值的副本)

我的代码:

static int a = 5;
public static void main(String[] args) {
    System.out.println("a= " + a);
    setA();
    System.out.println("a= " + a);  //Why is not 5?
    setA2(a);
    System.out.println("a= " + a);  //Why is not 7?
}
public static int getSeven() {
    return 7;
}

public static void setA() {
    a = 6;
}

public static void setA2(int n) {
    n = getSeven();
}

输出:

a= 5
a= 6
a= 6

为什么其他两个输出又是6

为什么要改变?

a不是对象!

2 个答案:

答案 0 :(得分:1)

第二个输出为6,因为前一行(函数6)将其设置为setA()setA()在函数外部但在类中设置了一个原语,因此main()中也可以使用它。

第三个输出为6,因为您设置了基元n而不是a。它是一个原始的,因此它不再引用a

答案 1 :(得分:1)

a是全局变量。

setA()会将a的值设为6。所以每个a的值都是六。

getSeven()正在返回7但你没有捕获它。所以a将保持不变。 试试这个a=getSeven();

setA2(int n)n分配给7,但不分配给a。 试试这个

public static void setA2(int n) {
    a = getSeven();
}