Java语法-转换后的额外加号有效吗?

标签 java syntax casting

因此,在将 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/

相关文章:

C# 如何解决 Func<T, bool> 中的逆变问题?

java - 从命令行运行 java 不会创建 new.txt

Java - 安排每日任务

java - 如何从 .java 文件(Java)外部实例化嵌套在类中的类?

c - 解释qsort中的C代码行

syntax - 特征中的 'where' 子句有什么作用?

c++ - 是否存在将 double 转换为 long long 的优雅方法?

java - 扩展List增加字段是否合适

scala - Scala 2.10.1 中的新脱糖行为

c++ - 从字符串转换为 uint8,反之亦然