simper 发表于 2021-1-28 20:13

java关于字符和整形的问题求助

char i='a';
char j='a'+1;//b
char k=i+1;//报错,从int转到char可能会有损失
大佬们求助为什么第二行可以运行第三行报错啊,数字1默认应该是int型,int型与char型相加不应该自动升级为int型吗

VioletKiss 发表于 2021-1-28 20:13

因为char类型有隐含强制类型转换,当右边都是常量计算的时候,编译器会根据数据的范围判断是否超过了左边的边界,没有超过就进行隐含强制类型转换,如果超过了会显示红色波浪线编译出错。
第二行是常量计算 'a' 和 1 都是常量
第三行是变量参与计算 i 是变量,1是常量

你可以看看这篇博客 https://blog.csdn.net/weixin_45652765/article/details/106841244

下面是 main 方法的字节码文件,红框可以看出是直接把数据压入栈顶

happyqq521 发表于 2021-1-29 09:27

涉及到编译优化问题,‘a’是字符常量,'a'+1在编译时已经可以确定值了,所以编译后第二句实际上是 char j='b'。但第三句中i是个变量,编译器不知道i+1的int值在不在char范围内只能报错。

simper 发表于 2021-1-29 13:53

VioletKiss 发表于 2021-1-29 10:12
因为char类型有隐含强制类型转换,当右边都是常量计算的时候,编译器会根据数据的范围判断是否超过了左边的 ...

好的,理解了
页: [1]
查看完整版本: java关于字符和整形的问题求助