一、两个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.