Ian*_*edv 16 java syntax casting
所以,我碰到一些铸造时困惑我byte
来char
,平时我会做到这一点:
for (byte b:"ABCDE".getBytes()) {
System.out.println((char)b);
}
Run Code Online (Sandbox Code Playgroud)
哪个会打印出来
A
B
C
D
E
Run Code Online (Sandbox Code Playgroud)
我不小心离开了和+
之间(char)
,b
并得到了相同的结果!?
像这样:
for (byte b:"ABCDE".getBytes()) {
System.out.println((char) + b);
}
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?
我基本上在做什么(char)(0x00 + b)
?因为
System.out.println((char) - b);
Run Code Online (Sandbox Code Playgroud)
产生不同的结果.
注意:使用Java版本1.8.0_20
Pet*_*rey 26
为什么会发生这种情况?
如果你-
在一个数字或表达式之前放置一元运算符,它就会否定它.
同样,如果你+
在一个数字或表达式之前放置一元运算符,它什么都不做.
将字节转换为char的更安全的方法是
char ch = (char)(b & 0xFF);
Run Code Online (Sandbox Code Playgroud)
这适用于0到255之间的字符,而不是0到127.
顺便说一句,你可以使用一元运算符来编写一些令人困惑的代码
int i = (int) + (long) - (char) + (byte) 1; // i = -1;
Run Code Online (Sandbox Code Playgroud)
这+
是一元加运算符 - 就像你可以说1
相当于+1
,b
相当于+b
.之间的空间+
和b
无关紧要.此运算符具有比强制转换更高的优先级,因此在应用它之后(如上所述,什么都不做),byte
然后将char
结果转换为a 并产生与之前相同的结果.
归档时间: |
|
查看次数: |
991 次 |
最近记录: |