Java 套路相关的面试谜题
Java interview puzzle related to 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++){
set.add(i);
set.remove(i-1);
}
System.out.println(set.size());
}
}
输出:10
但我很困惑为什么它的输出是 10。
任何人都可以回答我这里发生了什么。
谢谢
思坦苏
表达式 i-1 的类型为 int 并自动装箱为 Integer 对象,因此程序将 Short 对象添加到集合中,然后尝试删除 Integer 对象。该集合没有 Integer 对象,因此不会删除任何内容。
文字值 1
的类型为 int
。因此,值 i - 1
属于 int
类型,而不像 i
那样属于 short
类型。因此,您将 Short
的盒装实例添加到集合中,但删除了 Integer
的盒装实例。 remove()
方法因此不会删除任何内容,因为 Short
不等于 Integer
.
我遇到了下面的面试问题。
下面代码的输出是什么。
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());
}
}
输出:10
但我很困惑为什么它的输出是 10。
任何人都可以回答我这里发生了什么。
谢谢
思坦苏
表达式 i-1 的类型为 int 并自动装箱为 Integer 对象,因此程序将 Short 对象添加到集合中,然后尝试删除 Integer 对象。该集合没有 Integer 对象,因此不会删除任何内容。
文字值 1
的类型为 int
。因此,值 i - 1
属于 int
类型,而不像 i
那样属于 short
类型。因此,您将 Short
的盒装实例添加到集合中,但删除了 Integer
的盒装实例。 remove()
方法因此不会删除任何内容,因为 Short
不等于 Integer
.