对于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
被视为一个字母?
感谢您的回答,对不起,如果有一些英语错误,那不是我的箴言。
答案 0 :(得分:4)
在这种情况下
System.out.println((char)a+1);
您只是将a
转换为char
(它已经是)。添加使整个表达式为int
,因此重载的PrintWriter#println(int)
将被执行。要将其视为char
,请执行
System.out.println((char) (a+1));
二进制+运算符在应用于两个操作数时执行加法 数字类型,产生操作数的总和。
数字操作数上的加法表达式的类型是提升的 其操作数的类型。
扩展基元转换(第5.1.2节)用于转换或 两个操作数由以下规则指定:
如果任一操作数的类型为double,则另一个操作数转换为double。
否则,如果任一操作数的类型为float,则转换另一个操作数 漂浮。
否则,如果任一操作数的类型为long,则转换另一个操作数 很久。
否则,两个操作数都将转换为int类型。
答案 1 :(得分:1)
使用这种方式时:
(char)a + 1
首先转换a => char
,然后添加1个整数类型。
计算结果上升为整数类型。
如果要将所有表达式组合在一起,可以省略这个棘手的地方:
(char)(a + 1)