0x01
Java的+、-、*、/的最低运算精度是int,所以以下代码会报错:
short s1 = 3;
short s2 = 5;
s1 = s1 + s2;
以上代码的错误原因是s1+s2的结果是int类型,不能存入short类型变量。
但如果是+=、-=、*=、/=就不会有这个问题,以下这段代码不会报错:
short s1 = 3;
short s2 = 5;
s1 += s2;
0x02
运算的最高精度跟算式中最高精度(最大存储范围)的那个量有关系:
int a = 2147483647;
System.out.print(a+2);
// 此时会输出-2147483647
因为a(int类型)和2(默认为最低精度:int类型)最高精度是int,但结果超过int(16位有符号整数)的存储范围。
而改成long就能得到符合直观的结果:
long a = 2147483647;
System.out.print(a+2);
// 此时会输出2147483649