为什么以下两个结果不同?
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)。