为什么以下两个结果不同?

bsh % System.out.println((byte)'\u0080');
-128

bsh % System.out.println("\u0080".getBytes()[0]);
63

感谢您的回答。

最佳答案

(byte)'\u0080'仅获取不适合byte的代码点的数值,因此要受narrowing primitive conversion的约束,它将丢弃不适合该字节的位,并且由于设置了最高位,因此产生负数数。
"\u0080".getBytes()[0]根据您的平台默认编码将字符转换为字节(存在重载的getBytes()方法,可让您指定编码)。看起来您的平台默认编码无法表示代码点U + 0080,而是将其替换为“?” (代码点U + 003F,十进制值63)。

08-07 03:53