Java int to char输出真的很奇怪

时间:2013-10-20 16:31:00

标签: java char 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+1被视为一个字母?

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

2 个答案:

答案 0 :(得分:4)

在这种情况下

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

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

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

In the JLS

  

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

     

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

about promotion

  

扩展基元转换(第5.1.2节)用于转换或   两个操作数由以下规则指定:

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

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

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

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

  •   

答案 1 :(得分:1)

使用这种方式时:

  

(char)a + 1

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

计算结果上升为整数类型。

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

  

(char)(a + 1)