2014-02-11 67 views
0

我正在準備自己的Java認證,並在這種情況下與對象引用混淆。 在這段代碼中,我無法理解爲什麼當我們爲它們分配一個新對象時,ArrayList和數組的元素不會受到影響?與對象引用相混淆

ArrayList<StringBuilder> myArrList = new ArrayList<StringBuilder>(); 
    StringBuilder sb1 = new StringBuilder("Jan"); 
    StringBuilder sb2 = new StringBuilder("Feb"); 
    myArrList.add(sb1); 
    myArrList.add(sb2); 

    StringBuilder[] array = myArrList.toArray(new StringBuilder[2]); 
    for(StringBuilder val : array) { 
     System.out.println(val); 
    } 

    StringBuilder sb3 = new StringBuilder("NNN"); 
    sb2 = sb3; 

    for(StringBuilder val : array) { 
     System.out.println(val); 
    } 

    for(StringBuilder val : myArrList) { 
     System.out.println(val); 
    } 

輸出:

Jan 
Feb 
Jan 
Feb 
Jan 
Feb 

我會很感激,如果你能提供簡單的解釋。謝謝。

+4

閱讀本文http://stackoverflow.com/questions/40480/is-java-pass-by-reference – Christian

回答

4

引用是指針。爲一個變量分配一個新的值包括使這個指針指向另一個對象。所以,在開始的時候,你有兩個元素的數組:

array[0] ---> Jan <--- sb1 
array[1] ---> Feb <--- sb2 

然後再創建一個StringBuilder的,由SB3引用:

array[0] ---> Jan <--- sb1 
array[1] ---> Feb <--- sb2 
sb3 --------> NNN 

然後你說,SB2變量應該引用同一個對象作爲SB3變量:

array[0] ---> Jan <--- sb1 
array[1] ---> Feb 
sb3 --------> NNN <--- sb2 

正如你所看到的,數組[0]和陣列[1]仍引用相同的對象揚 - 2月份