因此,在将 byte
转换为 char
时,我遇到了一些让我感到困惑的事情,通常我会这样做:
for (byte b:"ABCDE".getBytes()) {
System.out.println((char)b);
}
哪个会打印出来
A
B
C
D
E
我不小心在 (char)
和 b
之间留下了一个 +
并得到了相同的结果!?
像这样:
for (byte b:"ABCDE".getBytes()) {
System.out.println((char) + b);
}
究竟为什么会这样?
我本质上是在做 (char)(0x00 + b)
吗?因为
System.out.println((char) - b);
产生不同的结果。
注意:使用Java版本1.8.0_20
最佳答案
Why exactly is this happening?
如果您将一元 -
运算符放在数字或表达式之前,它会取反。
类似地,如果您将一元 +
运算符放在数字或表达式之前,它什么也不做。
将字节转换为字符的一种更安全的方法是
char ch = (char)(b & 0xFF);
这适用于 0 到 255 之间的字符,而不是 0 到 127 之间的字符。
顺便说一句,您可以使用一元运算符来编写一些令人困惑的代码,例如
int i = (int) + (long) - (char) + (byte) 1; // i = -1;
关于Java语法-转换后的额外加号有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26277373/