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

发布于 09-13 01:20 字数 669 浏览 23 评论 0

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);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

满栀2022-09-20 01:20:10

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

image.png

被你宠の有点坏2022-09-20 01:20:10

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

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

https://www.cnblogs.com/datam...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文