2012-03-12 120 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

jip我明白,但有沒有其他方式,所以它會工作?任何sugestions? – user744329 2012-03-12 09:23:51

+1

@ user744329,如果要更改BGCLRFORPNLS的值,則必須執行類似BGCLRFORPNLS = Color.red的操作。 BGCLRFORPNLS不是最終的,因此您可以更改該值。但是,也許你應該擴展你真正想在這裏做的事情。 – ftr 2012-03-12 09:38:27

1

您只是簡單地更改引用,即您將引用c指向對象Red。這對您之前引用的對象絕對沒有副作用。