Java中的字符算法

时间:2014-09-27 18:24:50

标签: 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;

2 个答案:

答案 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的范围。