Java中,两个byte类型相加,结果为啥是int

public class Hello
{
    public static void main(String[] args)
    {
        System.out.println("hello");
        byte b1 = 3;
        byte b2 = 3;
        byte b3 = b1 + b2;
        System.out.println(b3);
    }
}

结果:
image.png
我的想法:这正是因为Java的健壮性?如果两个byte都是127,会损失精度,所以Java设计不允许这么做?在编译阶段就报错了。
所以啊,需要类型转换。

public class Hello
{
    public static void main(String[] args)
    {
        System.out.println("hello");
        byte b1 = 3;
        byte b2 = 3;
        byte b3 = (byte) (b1 + b2);

        System.out.println(b3);
    }
}
阅读 3.8k
2 个回答

因为jvm层面,没有byte
b1,b2实际上是以int存储的
image.png

image.png

不光 bytebooleanshortchar 类型的数值在做数学运算的时候,都会提升为 int。甚至这些变量的 sizeof 都是 4 字节,而非 C/C++ 里类似结构的那样有不同的长度。

但倒不是因为精度的问题(精度问题你没法解释为啥 int + int != long 啊),而是 JVM 为了节省指令集,所以一股脑都按 int 处理了。

https://www.cnblogs.com/datam...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题