ren*_*ene 9 java type-narrowing
编译器(sun-jdk-8u51)接受以下代码行,没有任何警告或错误:
short b = true ? 1 : 1;
Run Code Online (Sandbox Code Playgroud)
而接下来的两个代码行导致编译错误(不兼容的类型:可能从int转换为short的有损转换):
boolean bool = true;
short s = bool ? 1 : 1;
Run Code Online (Sandbox Code Playgroud)
为什么编译器在第二种情况下不能执行原始整数1 的相同缩小转换?
正如 @aioobe 在评论中所述:
这是因为在第一种情况下,由于
true
是编译时常量,因此整个表达式在编译时计算,因此基本上是short b = 1;
这样,而在第二个版本中,编译器不会为您进行简化,因此会出现错误
添加final
到变量的声明中bool
使其成为常量变量,这也允许编译器解释上面提到的代码。
final boolean bool = true;
short s = bool ? 1 : 1;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
235 次 |
最近记录: |