与set相关的Java面试难题
我面临下面的面试问题 下面代码的输出是什么与set相关的Java面试难题,java,collections,set,Java,Collections,Set,我面临下面的面试问题 下面代码的输出是什么 package com.demo; import java.util.HashSet; import java.util.Set; public class Test { public static void main(String[] args) { Set<Short> set=new HashSet<Short>(); for (short i = 0; i < 10; i++
package com.demo;
import java.util.HashSet;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Set<Short> set=new HashSet<Short>();
for (short i = 0; i < 10; i++){
set.add(i);
set.remove(i-1);
}
System.out.println(set.size());
}
}
package.com.demo;
导入java.util.HashSet;
导入java.util.Set;
公开课考试{
公共静态void main(字符串[]args){
Set=newhashset();
用于(短i=0;i<10;i++){
增加(i);
设置。移除(i-1);
}
System.out.println(set.size());
}
}
它给出的输出是:10
但我不明白为什么它的输出是10
任何人都可以回答我这里发生了什么
谢谢
SItansu表达式i-1的类型为int,并且自动装箱为整数对象,因此程序将向集合中添加短对象,然后尝试删除整数对象。集合没有整数对象,因此不会删除任何内容 文本值
1
的类型为int
。因此,值i-1
的类型为int
,而不是i
的类型。因此,将Short
的装箱实例添加到集合中,但删除Integer
的装箱实例。因此,remove()
方法不会删除任何内容,因为Short
不等于整数
,也值得注意的是,当remove被定义为接受Object
类型的参数时,即使对于Set
,也不会收到类型不匹配的警告或错误。编译器确实很高兴。然而,我的IDE(IntelliJ)足够聪明,可以警告我这个可能的错误。啊,我现在正在使用eclipse,但它对此没有显示任何内容。唉。(不过可能在某个地方有这样的设置……)