在java中添加两个char数据类型

时间:2018-06-12 12:31:09

标签: java char ascii

案例1:

char c='A'+'A'; 
System.out.println(c);   // print question mark (?)

案例2:

char c1='A';
char c2='A'+c1;   // Compile time error
System.out.println(c2);   

在case1中我有逻辑当我添加两个字符文字时,ascii值的总和是打印,这相当于问号的ascii值。 但在case2中为什么编译时错误显示' 无法从int转换为char '

如果char + char = int,则此规则必须适用于这两种情况。

4 个答案:

答案 0 :(得分:2)

在第一种情况下,添加了两个 final 字符,并且在编译时检查结果int是否不会溢出char。

在第二种情况下,一个操作数不是最终的,编译器拒绝执行总和。 有点愚蠢,但考虑多线程和其他情况,也许是合理的。至少是一个容易理解的规则。

否则

final char c1 = '0';
char c2 = '1' + c1; // 'a'

应该编译。

(不用说,不应该做'0'+'1'之类的事情。)

答案 1 :(得分:1)

添加或者两个或多个int类型或低于int的变量会产生int。

类型

所以你用char c2 = 'A' + c1;做的事实上并没有给你一个char结果。它给你int结果,你试图隐式地输入强制转换为byte,这给你编译时错误。

  

概要   Char + Char = Int   而且Char不能直接存储Int。

请尝试并执行此操作 char c2 = (char)('A' + c1);

这里显式地将int值转换为char类型 告诉编译器您已准备好接受可能发生的 有损转换

答案 2 :(得分:1)

在第二种情况下出现错误,因为JLS 5.6.2二进制表达式的两个操作数都转换为int。

要使其工作,您应该添加显式强制转换:

char c2=(char)('A'+c1);

答案 3 :(得分:0)

添加Java字符,短路或字节的结果是int

请参阅此帖子的详细解答: In Java, is the result of the addition of two chars an int or a char?