我知道按值调用的原始类型(已发送值的副本)
我的代码:
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不是对象!
答案 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();
}