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.