2013-02-27 60 views
-6

我有兩個例子,我不明白通過Ref Java。整數不修改,集合被修改,爲什麼?

的Java傳遞值作爲變量或引用

爲什麼在Ref類整型變量不發生變化(null)通行證? 爲什麼在RefCol類中收集變量被修改爲col(1)

類編號:

test(): entero: 5 

inicio(): entero: null 

類RefCol:

test(): col: [1] 

inicio(): col: [1] 

import java.util.Collection; 
import java.util.Vector; 


public class Ref { 

    public static void main(String[] args){ 
     Ref ref = new Ref(); 
     ref.inicio(); 
    } 

    public void inicio(){ 
     Integer entero = null; 
     test(entero); 
     System.out.println("inicio(): entero: " + entero); 
    } 

    public void test(Integer entero){ 
     entero = new Integer(5); 
     System.out.println("test(): entero: " + entero); 
    } 

} 





public class RefCol { 

    public static void main(String[] args){ 
     RefCol ref = new RefCol(); 
     ref.inicio(); 
    } 

    public void inicio(){ 
     Collection col = new Vector(); 
     test(col); 
     System.out.println("inicio(): col: " + col); 
    } 

    public void test(Collection col){ 
     col.add(new Integer(1)); 
     System.out.println("test(): col: " + col); 
    } 

} 
+2

http://stackoverflow.com/questions/2208943/how-增量一個類整數引用值在java中從另一種方法 – BobTheBuilder 2013-02-27 10:52:41

+0

不重複。我比較Integer與Collection ...¬¬ – Marquake 2013-02-27 15:21:50

+0

引用的問題可以解答您的問題。無論您使用哪種類型的對象,概念保持不變 – cowls 2013-02-27 15:53:20

回答

-2

簡而言之:原始類型和「原始包裝(整數,長,短,雙,浮點,字符,字節,布爾)」不能通過引用進行修改。

檢查http://en.wikipedia.org/wiki/Immutable_object詳情

+0

這是我最喜歡的答案:D是我需要知道的。謝謝!! – Marquake 2013-02-27 11:18:12

+0

原始類型和「原始包裝」...通常所有類都是最終的?我正在用StringBuffer進行測試(是最終的),不會改變。 – Marquake 2013-02-27 11:26:17

+0

這只是故事的一半。由於這些對象是不可變的,因此您正在創建一個新的實例,調用它們上的方法,從而重新分配變量所引用的對象。如果你做了col = new ArrayList(),你會看到相同的行爲 – cowls 2013-02-27 11:38:27

3

您將REFERENCE的COPY傳遞給對象實例。

如果直接更改對象。例如col.add它會改變基礎對象。

如果更改它所引用的對象。例如。 new Integer()它只會改變局部變量的參考。

3

不是一回事。

entero = new Integer(5); 

改變基準entero,而

col.add(new Integer(1)); 

改變所引用對象col

-4

{()在這裏創建 對象將撐的的結束後銷燬}

}

+0

不,怎麼樣'col.add(new Integer(1));' – m0skit0 2013-02-27 15:48:48