案例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,则此规则必须适用于这两种情况。
答案 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)
答案 3 :(得分:0)
添加Java字符,短路或字节的结果是int
请参阅此帖子的详细解答: In Java, is the result of the addition of two chars an int or a char?