有人可以查看此代码中的错误吗? 输出应为true,但X仍为false ..
setOn(X , true);
System.out.println(X);
}
public static void setOn(boolean mode, boolean onValue) {
mode = onValue;
}
public static boolean X = false;
我不能使用X = onvalue,因为我还有其他模式可供使用。
答案 0 :(得分:4)
方法setOn
会收到X
的副本,并将 设置为onValue
,但它不会更改原始X
变量。
但它甚至不需要X
作为参数,大概是因为它已经在这个代码所在的类的范围内。只需将X
设置为{{ 1}}没有onValue
参数。
mode
答案 1 :(得分:0)
您无法更改X
的值,因为setOn()
会收到X
的新副本。你应该做这样的事情:
public static void setOn(boolean onValue) {
X = onValue;
}
答案 2 :(得分:0)
进一步扩展答案:
你也可以通过传递String来重现同样的问题。你将清楚地了解不变性。
引用java immutability和Wrapper类以及autoboxing。