Java中int、char、byte类型的计算以及=和+=的区别

一、两个byte/int/short类型的值相加,返回值却是int

Java中的byte,short,char进行计算时都会提升为int类型。这是因为:使用较小类型运算没有性能优势,消除较小的类型使得字节码更简单,并且使得具有未来扩展空间的完整指令集仍然适合单个字节中的操作码。因此,较小的类型通常被视为Java设计中的二等公民,在各个步骤转换为int,因为这简化了一些事情。
这个原因可以解释byte和short被提升为int类型。
而两个char类型相加,实际上是它们的Ascii码相加,因此返回的是int类型。

二、a=a+b和a+=b的区别

        byte a = 17;
        byte b = 127;
        b = a + b; // 报错Incompatible types.
        b +=a;
        System.out.println(b);

+=操作符会进行隐式自动类型转换,此处a+=b隐式地将相加操作的计算结果强制转化为持有结果的类型,即b的类型byte,而a=a+b则不会自动进行类型转换。
结果如下图所示:
在这里插入图片描述

三、另一个知识点

上图中,b+=a为什么是 -122而不是127+17=144?

public static void main(String[] args) {
        byte a = 17;
        byte b = 127;
        b += a;
        System.out.println(b);

        byte m = 17;
        byte n = 127;
        int c = m + n;
        System.out.println(c);
    }

运行结果如下图:
在这里插入图片描述
原因是: +=运算符将计算结果转化成了byte类型的,而byte类型的范围是【-128,127】,144超出了范围,所以结果是 -128-(144-127)+1= -112.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值