以下代码段发出编译时错误。
char c = 'c';
char d = c + 5;
第二行的错误是:
possible loss of precision
required: char
found: int
该错误消息基于NetBeans IDE。
如下c
声明该字符时final
。
final char c = 'c';
char d = c + 5;
编译时错误消失。
与最终字符串的情况无关
什么是final
修改有所作为吗?
原因是JLS#5.2(分配转换)如此表示:
如果该表达式是类型为byte,short,char或int的常量表达式(第15.28节),则当变量的类型为byte,short或char且常量表达式的值时,可以使用缩小的原始转换。用变量的类型表示。
在您的示例中,char c = 'c';
不是一个常数,而是一个常数final char c = 'c';
。
基本原理可能是加法运算符+
首先将其操作数转换为整数。因此,除非一切都恒定,否则该操作可能会溢出,在这种情况下,编译器可以证明没有溢出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句