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 次 |
| 最近记录: |