编译器的某些功能让我感到困惑(使用 Eclipse 的 Oracle JDK 1.7)。
所以我有这本书说 char 原语需要显式转换为 short 和 byte ,这一切都是有道理的,因为数据类型的允许范围不重叠。
换句话说,下面的代码可以工作(但如果没有显式类型转换就无法工作):
char c = '&';
byte b = (byte)c;
short s = (short)c;
打印 b 或 s 正确显示数字 38,它是 Unicode 中 (&) 的数字等价物。
这让我想到了我的实际问题。为什么以下也有效?
byte bc = '&';
short sc = '&';
System.out.println(bc); // Correctly displays number 38 on the console
System.out.println(sc); // Correctly displays number 38 on the console
现在我肯定会理解以下内容(也可以):
byte bt = (byte)'&';
System.out.println(bt); // Correctly displays number 38 on the console
但是这种没有编译器警告的字符到字节(和短的)“潜行转换”对我来说似乎不正确。
有人可以解释一下,为什么这是允许的?
原因可能在于对'<char>'
自身的解释,因此它实际上不会进入 char 原始状态,而是作为数字(八进制或十六进制等)值处理?