2015-03-25 99 views
0

給定一個代碼片段集大小甚至不減少它

package setexample; 

import java.util.HashSet; 
import java.util.Set; 

public class Mapit { 

    public static void main(String[] args) { 
     Set<Integer> set = new HashSet<Integer>(); 
     Integer i1 = 45; 
     Integer i2 = 46; 
     set.add(i1); 
     set.add(i1); 
     set.add(i2); 

     System.out.println(set.size()); 
     set.remove(i1); 

     System.out.println(set.size()); 
     i2 =47; 
     set.remove(i2); 

     System.out.println(set.size()); 
    } 
} 

的O/P出來是2 1 1,而不是我所期待的2 1 0。是什麼原因 ?

+6

你試圖從包含'46'的集合中刪除'47'。你期望會發生什麼? – Kayaman 2015-03-25 11:03:02

+1

@Kayaman OP懷疑我猜的不是價值,是關於對象,它是引用......如果你不把'i2'放在'Collection'中,你可以將值從'47'改變爲'46',並且使用它只引用名稱 – 2015-03-25 11:08:10

+0

@Jordi Castilla是的,但我想通過值的java傳遞,因此參考變量(i2)更新 – 2015-03-26 06:03:26

回答

3

以前命名爲i2的對象在Set set中的引用與i2後面的對象的不同:i2 =47;。 JVM爲Set中的對象創建了一個新的引用,因此您可以將其刪除,但引用Set中的對象時,不能刪除引用其名稱的引用。