gpt4 book ai didi

java - 为什么此代码打印 100 而不是 1?

转载 作者:搜寻专家 更新时间:2023-11-01 01:16:51 26 4
gpt4 key购买 nike

public class Short {
public static void main(String[] args) {

Set s = new HashSet();

for(short i = 0; i < 100; i++) {
s.add(i);
s.remove(i-1);
}

System.out.print(s.size());
}

}

谁能告诉我为什么它打印 100 而不是 1?

最佳答案

似乎有一些自动装箱正在进行...即 Java 自动在 Object 和原始类型之间转换...

如果我 ... 重命名您的类,请在 Set 的初始化中使用 Short 而不是 short 然后使用...

Set<Short> s = new HashSet<Short>();

for (short i = 0; i < 100; i++) {
s.add(i);
s.remove(i - 1);
}

System.out.println(s.size());

它将打印 100...但是为什么呢?

要回答这个问题,我们需要仔细看看 remove 方法...

Set#remove(Object o)需要一个 Object,不是像 add 这样的通用类型,而是一个实际的 Object...当你执行 i - 1,Java 假定 1 是一个 int 并自动按比例放大类型并将其自动装箱为 new Integer(i - 1)。 ..set 中不存在哪个 clear(您没有任何 Integer 对象!)

但是,如果我们将 s.remove(i - 1); 更改为 s.remove((short)(i - 1));,我们将强制将值转换回 short,然后自动装箱为 new Short(i - 1),它确实存在于您的集合中,最终结果是它现在将打印 1...

简单;)

关于java - 为什么此代码打印 100 而不是 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com