如果我将一个字符转换为byte
,然后再转回char
,那么这个字符会神秘地消失并变成其他的东西。这是怎么可能的呢?
以下是代码:
char a = 'È'; // line 1
byte b = (byte)a; // line 2
char c = (char)b; // line 3
System.out.println((char)c + " " + (int)c);
直到第二行都很好:
在第一行中,我可以在控制台上打印"a",它会显示"È"。
在第二行中,我可以在控制台中打印"b",它将显示-56,这是因为字节是有符号的,而200是"È"。所以还是很好的。
但第三行出了什么问题?"c"变成了其他内容,程序输出? 65480
。那完全不同。
我应该在第三行写什么才能得到正确的结果?
byte
是8位比特(bit)
。一个char
是16位比特(bit)
。明白了吗? - Rohit Jainchar
类型需要两个字节,而byte
类型只需要一个字节,这是一个问题,但在这里,单独来看,这并不重要,因为“È”是一个编码点在256以下的字符,所以可以存储在一个字节中。问题在于,char
是无符号的,而byte
不是。将char
强制转换为byte
仅适用于ASCII字符,因此对于像这样编码点在127以上的字符则不适用。 - Lumi