算术运算中的自动类型转换
笔者之前出过一篇由Java表达式和运算符引发的类型转换介绍的文章,但是今天还是在这一个问题上出错了。
问题如下:
public static void main(String[] args) {
Set<Short> set = new HashSet<>();
for (short i = 0; i < 5; i++) {
set.add(i);
set.remove(i - 1);
}
System.out.println(set.size());
}
第一眼看到这个问题的答案是 1 .但是又觉得怪怪的,就实际运行了一下。在编码的时候,编译器报了一个警告。
通过这个警告就已经能够知道,i - 1 的结果是 int 类型的。具体的原因就是因为运算中 1 的存在使得算式的整体类型提升为 int 类型的。
现在我试图通过一些手段将程序的输出结果变成 1.
修改,有两种办法,一种是直接类型强转,一种是使用联合运算符。
public static void main(String[] args) {
Set<Short> set = new HashSet<>();
for (short i = 0; i < 5; i++) {
set.add(i);
set.remove((short)(i - 1));
}
System.out.println(set.size());
}
public static void main(String[] args) {
Set<Short> set = new HashSet<>();
for (short i = 0; i < 5; i++) {
set.add(i);
set.remove(i -= 1);
}
System.out.println(set.size());
}