在Java中将char作为一个字节处理,结果不同

art*_*1go 3 java unicode binary byte char

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

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

bsh % System.out.println("\u0080".getBytes()[0]);
63
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答.

Mic*_*rdt 5

(byte)'\u0080'只取代码点的数值,它不适合a byte,因此受到一个缩小的原语转换,它会丢弃不适合该字节的位,并且由于设置了最高位,产生负数数.

"\u0080".getBytes()[0]根据您的平台默认编码将字符转换为字节(有一个getBytes()允许您指定编码的重载方法).看起来您的平台默认编码不能代表代码点U + 0080,并将其替换为"?" (代码点U + 003F,十进制值63).