2015-03-25 61 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中的对象时,不能删除引用其名称的引用。