请检查以下代码片段:
片段 #1
int a=20;
int b=30;
byte c= (a>b)? 20:30;
Error:
incompatible types: possible lossy conversion from int to byte
byte c= (a>b)? 20:30;
片段 #2
int a=20;
int b=30;
byte h1=70;
byte c= (a>b)? 20:h1;
代码片段 #3
int a=20;
int b=30;
byte h1=70;
byte h2=89;
byte c= (a>b)? h1:h2;
片段 #4
byte c= (true)? 20:30;
除了代码片段 #1 之外,所有这些代码都可以编译通过。为什么会出现这种行为呢?如果代码片段 #1 产生了“可能会有精度损失的转换”错误,那么代码片段 #2 和 #4 也应该如此,因为它们仍然包含类型为 int
的文字。为什么它们可以成功编译?
int
更改为final int
(常量),编译器将会发现变量a
和b
的值在字节范围内 -128..127。对于int
类型的变量,编译器不进行这样的评估,并且假定该变量可能会超出字节范围。 - Joop Eggen