HashSet charSet = new HashSet();
for (char i = 0; i < 100; i++) {
charSet.add(i);
charSet.remove(i - 1);
}
System.out.println(charSet.size());
HashSet intSet = new HashSet();
for (int i = 0; i < 100; i++) {
intSet.add(i);
intSet.remove(i - 1);
}
System.out.println(intSet.size());
输出分别为100和1。
我只是意识到short和char不会在Java中自动取消装箱。设计师为什么不认为这样做很重要?
最佳答案
实际上,这与装箱或拆箱无关。
当对char
进行算术运算时,按照JLS §5.6.2的规定,它会转换为int
:
double
,则另一个操作数将转换为double
。 float
,则另一个将被转换到
float
。 long
,则另一个将被转换到
long
。 int
类型。 因此,
i - 1
不是char
,而是int
。并且因为您的Integer
中没有charSet
(只有Character
),所以没有要删除的内容。如果将i - 1
转换为char
,则会得到预期的结果。