Java将字节转换为char - 转换问题

时间:2016-09-21 21:52:17

标签: java

我在StackOverflow上找到了将字节转换为char的解决方案:

byte b = 65;
char c = (char)(b & 0xFF);

我不能得到的是按位和0xFF。以上与这个有何不同?

byte b = 65;
char c = (char)b;

有人可以一步一步地向我解释什么转换成什么类型​​?

1 个答案:

答案 0 :(得分:1)

"&安培; 0xff的"通常在Java中用于切断从字节到较大整数类型的隐式转换的符号扩展。

在Java中,byte是一种带符号的数据类型,其中值使用二进制补码存储,因此-1表示为0xff。 -1的相应int表示形式是0xffffffff。因此,当从字节转换为整数时,所有附加的前导位都从字节的最高位填充。

按位,对于高达0x7f的字节值不需要。但是如果你想转换例如一个不间断的空间(代码点160 / 0xa0),它将符号扩展为0xffa0,这是一个与预期的char值0x00a0不同的字符。