0

我有一个关于 int 到 char 转换的奇怪问题。这是我的代码:

    char a=100;
    System.out.println(a);
    System.out.println(a+1);
    System.out.println();

    System.out.println((char)a+1);
    System.out.println((char)101);
    System.out.println( (char)a+1==(char)101 );

它给了我这个输出:

d
101

101
e
true

这绝对很奇怪:比较时,两个不同的输出似乎是相同的!为什么会这样?以及如何使a+1beee 被视为 char ?

感谢您的回答,如果有一些英语错误,对不起,这不是我的母语。

4

2 回答 2

4

在这种情况下

System.out.println((char)a+1);

您只是将其转换a为 a char(它已经是)。加法使整个表达式成为一个int,因此重载PrintWriter#println(int)的被执行。为了让它被视为一个char,做

System.out.println((char) (a+1));

在 JLS

二进制 + 运算符在应用于两个数字类型的操作数时执行加法,产生操作数的和。

数值操作数上的加法表达式的类型是其操作数的提升类型。

以及关于促销

加宽原语转换(第 5.1.2 节)适用于转换以下规则指定的一个或两个操作数:

  • 如果任一操作数是 double 类型,则另一个操作数将转换为 double。

  • 否则,如果任一操作数的类型为浮点型,则另一个将转换为浮点型。

  • 否则,如果任一操作数是 long 类型,则另一个将转换为 long。

  • 否则,两个操作数都转换为 int 类型。

于 2013-10-20T16:33:57.547 回答
1

当您使用这种方式时:

(字符)a + 1

它首先转换a => char,然后添加整数类型的 1 。

并且计算结果向上转换为整数类型。

如果您将所有表达式放在一起,则可以省略这个棘手的地方:

(char)(a + 1)

于 2013-10-20T16:48:15.650 回答