Java中的字符算法

Java中的字符算法,java,math,char,Java,Math,Char,在玩的时候,我遇到了一些奇怪的事情: 以下不是有效的Java代码: char x = 'A'; x = x + 1; //possible loss of precision 因为其中一个操作数是整数,所以另一个操作数转换为整数。无法将结果分配给字符变量。。。当 char x = 'A'; x += 1; 有效,因为生成的整数自动转换为字符 到目前为止还不错。这对我来说似乎很清楚,但是。。。为什么下面的Java代码是有效的 char x; x = 'A' + 1; 因为 'A' +

在玩的时候,我遇到了一些奇怪的事情:

以下不是有效的Java代码:

char x = 'A';
x = x + 1;    //possible loss of precision
因为其中一个操作数是整数,所以另一个操作数转换为整数。无法将结果分配给字符变量。。。当

char x = 'A';
x += 1;
有效,因为生成的整数自动转换为字符

到目前为止还不错。这对我来说似乎很清楚,但是。。。为什么下面的Java代码是有效的

char x;
x = 'A' + 1;
因为

'A' + 1
是一个常量表达式。编译时已知结果将适合
char

鉴于

'A' + 787282;

将不适合
字符
,因此将导致编译错误。

它是有效的,因为它是编译时常量表达式。是吗

char x;
char y = 'A';
x =  y + 1;
编译器将给您一个编译时错误,因为现在它不是编译时常量表达式。但是,如果将变量
y
设置为
final
,表达式将再次变为编译时常量,因此下面的代码将编译

char x;
final char y = 'A';
x =  y + 1;

这个故事的寓意是,当您将整数赋给字符时,只要它是编译器时间常数,并且应该适合
字符的范围,编译器就会允许它

@Sotirios非常感谢您的快速回答。事情现在对我来说更清楚了…@sol4me:谢谢你的“最终角色”提示…@Alboz:起初我不知道怎么做。现在它完成了…现在您已经了解了它是如何在这里工作的:)。干得好。可能是重复的