因此,当我将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
答案 0 :(得分:26)
为什么会发生这种情况?
如果你在一个数字或表达式之前放置一元-
运算符,它就会否定它。
同样,如果你在一个数字或表达式之前放置一元+
运算符,它什么都不做。
将字节转换为char的更安全的方法是
char ch = (char)(b & 0xFF);
这适用于0到255之间的字符,而不是0到127。
顺便说一句,你可以使用一元运算符编写一些令人困惑的代码,如
int i = (int) + (long) - (char) + (byte) 1; // i = -1;
答案 1 :(得分:7)
b是一个字节,也表示为+ b。例如,3也可以写为+3。因此,((char)+ b)与((char)b)
相同答案 2 :(得分:5)
+
是一元加号运算符 - 就像您可以说1
相当于+1
,b
相当于+b
。 +
和b
之间的空格无关紧要。此运算符的优先级高于强制转换,因此在应用之后(如上所述,不执行任何操作),生成的byte
将转换为char
并生成与之前相同的结果。