在上一些在线课程时,它提到,如果我们在 Java 中有一个条件表达式,一边返回byte
or short
,另一边返回 final int
,那么如果int
值适合short
or,byte
它将被缩小以匹配该类型。但这仅适用于 final int
,而不适用于 final short
。
我想知道这背后的逻辑是什么,为什么编译器允许一个收缩转换而阻止另一个?这似乎是合乎逻辑和正确的,那么为什么要有这个限制呢?
以下代码可以正常工作并编译
public class Testing {
public static void main(String[] args) {
final int x = 99;
byte y = 33;
byte r = true ? x : y;
System.out.println(r);
}
}
但如果我将其更改为short
,则会出现编译错误
public class Testing {
public static void main(String[] args) {
final short x = 99;
byte y = 33;
byte r = true ? x : y;
// java: incompatible types: possible lossy conversion from short to byte
System.out.println(r);
}
}