混合表达式处理“坑”很多,看看下面这段代码:
short x = 0; int y = 123456; x += y; System.out.println(x);
按照正常的理解 x+=y 等价于 x = x+y
这里将int型的 y 强转为short型 x,会报告错误:
错误: 不兼容的类型: 从int转换到short可能会有损失
但是,上面的代码居然没有报错。
这里就是混合类型表达式默认进行了一次类型转换,将结果转换为左侧变量的类型,即x类型的short。
由于123456越界了,所以结果就是-7616。
总结
隐藏的类型转换很有可能编译不报错,但实际结果却对数值进行了截断。
当+=左右两边类型不相等时,一定要注意。
时间: 2024-10-19 07:52:11