大家都知道在很多编程语言中,a+=b都是a=a+b的缩写,但是他们两个之间的差别,大家又是否知道呢?
一、a+=b与a=a+b的区别
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型
所以short s1 = 1; s1 += 1;以及short s1 = 1; s1 = s1 + 1;两种编写方法都是错误的。
其实java中,存在三种类型转换:
恒等转换(相同容量的两个数据类型之间的赋值);
拓宽转换(小容量类型赋值给大容量类型);
窄化转换(大容量赋值给小容量类型).
前两种转换都是编译程序自动执行的,而窄化转换则要求必须显式的执行. 上述提及的那个例子,则属于窄化转换。