Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使将对象从集合中移除,集合大小也不会减小_Java - Fatal编程技术网

Java 即使将对象从集合中移除,集合大小也不会减小

Java 即使将对象从集合中移除,集合大小也不会减小,java,Java,给出一段代码片段 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

给出一段代码片段

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());
    }
}
包设置示例;
导入java.util.HashSet;
导入java.util.Set;
公共类Mapit{
公共静态void main(字符串[]args){
Set=newhashset();
整数i1=45;
整数i2=46;
添加(i1);
添加(i1);
添加(i2);
System.out.println(set.size());
设置。移除(i1);
System.out.println(set.size());
i2=47;
设置。移除(i2);
System.out.println(set.size());
}
}


o/p显示为
211
,而不是我预期的
2110
。原因是什么?

Set Set
中先前命名为
i2
的对象的引用与第行之后命名为
i2
的对象不同:
i2=47。JVM为
集中的对象创建了一个新的引用,因此您可以删除它,但引用
集中的对象,您不能通过引用它以前的名称来删除它。

集合
中先前命名为
i2
的对象的引用与第行之后命名为
i2
的对象的引用不同:
i2=47。JVM为
集中的对象创建了一个新的引用,因此您可以删除它,但引用
集中的对象,您不能通过引用它以前的名称来删除它。

集合
中先前命名为
i2
的对象的引用与第行之后命名为
i2
的对象的引用不同:
i2=47。JVM为
集中的对象创建了一个新的引用,因此您可以删除它,但引用
集中的对象,您不能通过引用它以前的名称来删除它。

集合
中先前命名为
i2
的对象的引用与第行之后命名为
i2
的对象的引用不同:
i2=47。JVM已经为
集中的对象创建了一个新的引用,因此您可以删除它,但是引用
集中的对象时,您不能删除它,因为它引用的是以前的名称。

您试图从包含
46
的集中删除
47
。你以为会发生什么?@Kayaman OP怀疑我猜不是关于价值,而是关于对象和它的引用。。。如果未将
i2
放入
集合
中,则可以将值从
47
更改为
46
,并仅引用name@JordiCastilla是的,但我发现java是按值传递的,因此引用变量(i2)是updated@AbhishekSingh当您没有对该对象的任何其他引用时,这是完全正确的。您试图从包含
46
的集合中删除
47
。你以为会发生什么?@Kayaman OP怀疑我猜不是关于价值,而是关于对象和它的引用。。。如果未将
i2
放入
集合
中,则可以将值从
47
更改为
46
,并仅引用name@JordiCastilla是的,但我发现java是按值传递的,因此引用变量(i2)是updated@AbhishekSingh当您没有对该对象的任何其他引用时,这是完全正确的。您试图从包含
46
的集合中删除
47
。你以为会发生什么?@Kayaman OP怀疑我猜不是关于价值,而是关于对象和它的引用。。。如果未将
i2
放入
集合
中,则可以将值从
47
更改为
46
,并仅引用name@JordiCastilla是的,但我发现java是按值传递的,因此引用变量(i2)是updated@AbhishekSingh当您没有对该对象的任何其他引用时,这是完全正确的。您试图从包含
46
的集合中删除
47
。你以为会发生什么?@Kayaman OP怀疑我猜不是关于价值,而是关于对象和它的引用。。。如果未将
i2
放入
集合
中,则可以将值从
47
更改为
46
,并仅引用name@JordiCastilla是的,但我发现java是按值传递的,因此引用变量(i2)是updated@AbhishekSingh当您没有对对象的任何其他引用时,这是完全正确的。