2012-03-12 16 views
0

以下のコードで問題が発生しています。私の問題は、変数BGCLRFORPNLSは変数cと同じ値をとらないということです。しかし、この変数は参照であるため、うまくいくはずです。java設定変数

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()); 
} 

答えて

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 
+0

ジップ私は理解していますが、それ以外の方法で動作するようになっていますか?どんな懇願? – user744329

+1

@ user744329、BGCLRFORPNLSの値を変更する場合は、BGCLRFORPNLS = Color.redのような処理を行う必要があります。 BGCLRFORPNLSはfinalではないため、値を変更できます。しかし、おそらくここであなたが実際にやろうとしていることを広げてください。 – ftr

1

参照を変更している、つまり参照cがオブジェクトRedを指しています。これは以前に参照したオブジェクトには全く副作用がありません。

関連する問題