吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1331|回复: 3
收起左侧

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

[复制链接]
simper 发表于 2021-1-28 20:13
25吾爱币
char i='a';
char j='a'+1;//b
char k=i+1;//报错,从int转到char可能会有损失
大佬们求助为什么第二行可以运行第三行报错啊,数字1默认应该是int型,int型与char型相加不应该自动升级为int型吗

最佳答案

查看完整内容

因为char类型有隐含强制类型转换,当右边都是常量计算的时候,编译器会根据数据的范围判断是否超过了左边的边界,没有超过就进行隐含强制类型转换,如果超过了会显示红色波浪线编译出错。 第二行是常量计算 'a' 和 1 都是常量 第三行是变量参与计算 i 是变量,1是常量 你可以看看这篇博客 https://blog.csdn.net/weixin_45652765/article/details/106841244 下面是 main 方法的字节码文件,红框可以看出是直接把数据压入栈 ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

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

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

企业微信截图_20210129095346.png
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类型有隐含强制类型转换,当右边都是常量计算的时候,编译器会根据数据的范围判断是否超过了左边的 ...

好的,理解了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 08:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表