在玩耍的时候我遇到了什么,这对我来说似乎很奇怪:
以下不是有效的Java代码:
char x = 'A';
x = x + 1; //possible loss of precision
因为其中一个操作数是一个整数,所以另一个操作数转换为整数。结果无法分配给字符变量......而
char x = 'A';
x += 1;
有效,因为生成的整数 - 自动 - 转换为字符。
到目前为止一切顺利。这对我来说似乎很清楚但是......为什么以下是有效的Java代码?
char x;
x = 'A' + 1;
答案 0 :(得分:1)
因为
'A' + 1
是一个常量表达式。在编译时已知结果将适合char
。
尽管
'A' + 787282;
不适合char
,因此会导致编译错误。
答案 1 :(得分:1)
它是有效的,因为它是一个编译时常量表达式。如果是
char x;
char y = 'A';
x = y + 1;
编译器会给你一个编译时错误,因为现在它不是编译时常量表达式。但是如果你将变量y
设为final
,表达式将再次变为编译时常量,因此下面的代码将被编译。
char x;
final char y = 'A';
x = y + 1;
故事的道德是,当您为char分配整数时,编译器将允许它,只要它是编译器时间常量并且它应该适合char
的范围。