Java中字符差值运算问题:为何两段代码运行结果不同?
Java字符算术运算的类型转换问题解析
核心规则:char运算的类型提升
在Java中,char是无符号16位整数类型,取值范围为0~65535。当对char类型执行算术运算时,会自动提升为int类型参与计算,最终运算结果也为int类型。
代码片段1能正常运行的原因
'b'-'a'的计算逻辑:
'b'的ASCII码为98,'a'为97,计算结果是1(int类型)- 该int值
1落在char的合法取值范围内,Java允许隐式转换将此范围内的int值直接赋值给char变量,因此编译通过。
代码片段2报错的原因
'b'-'c'的计算逻辑:
'b'(98)减'c'(99)的结果为-1(int类型)- 负数超出了
char的无符号取值范围,Java不允许这种可能导致精度损失的隐式转换,因此抛出incompatible types: possible lossy conversion from int to char错误。
强制转换后能运行的原因
当使用char c = (char) ('b'-'c');时,是手动告知编译器:我明确知晓转换风险,强制执行转换。此时编译器会将int类型的-1转换为char对应的16位无符号值(即65535,因为-1的16位补码是全1,对应十进制65535),因此代码可以正常执行。
内容的提问来源于stack exchange,提问作者Atharva
相关产品推荐
相关产品推荐

