我在使用下面的代码时遇到了一些问题。我的问题是变量BGCLRFORPNLS
与变量c
的值不同。但它应该有效,因为这个变量是一个参考。
public static Color BGCLRFORPNLS = Color.BLACK;
private static void Initialze() {
List<Color> colors = new ArrayList<Color>();
colors.add(BGCLRFORPNLS);
Color c = colors.get(0);
JOptionPane.showMessageDialog(null, "hashcode of c: "+ c.hashCode());
JOptionPane.showMessageDialog(null, "hashcode of BGCLRFORPNLS: "+ BGCLRFORPNLS.hashCode());
c = Color.red;
JOptionPane.showMessageDialog(null, "color of c: "+ c.toString());
JOptionPane.showMessageDialog(null, "color of BGCLRFORPNLS: "+ BGCLRFORPNLS.toString());
}
答案 0 :(得分:4)
不,它不应该起作用,因为c
是对Color
对象的引用,当您更改它时,您不会更改对该对象的任何其他引用不要更改对象的值,只能更改特定的引用。
statement | BGCLRFORPNLS | colors[0] | c
---------------------------------------------------------------------------------
BGCLRFORPNLS = Color.BLACK; | Color.BLACK | ---- | ------
colors.add(BGCLRFORPNLS); | Color.BLACK | Color.BLACK | ------
Color c = colors.get(0); | Color.BLACK | Color.BLACK | Color.BLACK
c = Color.red; | Color.BLACK | Color.BLACK | Color.red
答案 1 :(得分:1)
您只是更改引用,即您将引用c指向对象Red。这对您之前引用的对象完全没有副作用。