byte加byte居然是int了?
问题现象
最近在看 Java 的基础知识时看到一个有意思的现象,在 Java 中两个 byte 相加之后的结果的类型变成 int 类型了:
byte a = 1;
byte b = 2;
b = a + b;
从Idea给的提示可以看到,两个 byte 类型相加的结果变成了 int 类型,不能赋值给一个 byte 类型变量。其实不只是 byte,包括:short、char 等类型执行运算之后的结果也变成 int 类型了,不再是参与运算之前的类型。
如果想要上述代码能够正常编译和运行,可以修改为如下的写法:
// 写法一
byte a = 1;
byte b = 2;
b = (byte) (a + b);
// 写法二(这种写法是上面写法的一种简化写法,具体可以见:https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2
byte a = 1;
byte b = 2;
b += a;
问题原理
首先根据 Java 语言规范的描述,在执行加法或者减法运算时,会对操作数进行类型提升:
在进行类型提升的时候,byte、short、char 类型都会提升为int类型,由于两个数都提升为了 int 类型,它们执行的运算结果自然而然也就是 int 类型的了。
在 JVM 的操作数栈的一个单位长度是 32 位,因此为了把参与运算的数放到操作数栈中就必须对其进行扩展,同时我理解这里也是为了和局部变量表的单位相匹配,局部变量表的基本单位是槽位,一个槽位的宽度也是 32 位。
作者:javadaydayup
出处:https://www.cnblogs.com/javadaydayup/p/18631370
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验