构造函数和方法错误

时间:2014-03-24 17:00:22

标签: java methods

有人可以查看此代码中的错误吗? 输出应为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,因为我还有其他模式可供使用。

3 个答案:

答案 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)

进一步扩展答案:

  1. 如果传递了boolean,则java使用Call by Value,因为它是基本数据类型。
  2. 如果传递了布尔值,则java使用Call by Reference,但由于布尔值是不可移动的,因此它的实际值不能更改,但我们操作的将是布尔的新Wrapper实例。
  3. 你也可以通过传递String来重现同样的问题。你将清楚地了解不变性。

    引用java immutability和Wrapper类以及autoboxing。

    http://www.javaranch.com/journal/2003/04/immutable.htm