Java中的字符算法
在玩耍时我遇到了什么,这对我来说似乎很奇怪:
以下是无效的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
,因此会导致编译错误。
它是有效的,因为它是一个编译时常量表达式。 如果是的话
char x; char y = 'A'; x = y + 1;
编译器会给你一个编译时错误,因为它现在不是编译时常量表达式。 但是如果你将变量y
作为final
,表达式将再次转换为编译时常量,因此下面的代码将编译。
char x; final char y = 'A'; x = y + 1;
故事的道德是当你将一个整数赋给一个char时,编译器只要它是编译器时间常量就允许它,它应该适合char
的范围。