关于a=a+1和 a +=1
看到一道java面试题:
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
那怎么回答呢,简单来说,short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
但是为什么呢?google一下啦。
本来 a=a+b和a +=b是一样的。就单纯的执行这两条语句,不考虑编译器的优化的话,a=a+b的执行效率是低于a+=b的,因为它多进行了一步中间变量的操作,
而且会多占用一个变量的空间。而Java编译器默认对其进行了优化,优化之后两条语句都当做 a+=b来执行了,所以实际上是没有任何却别的。
在a,b类型不同时,是有区别的,会涉及后者会涉及到类型的自动转换(如上题)。
public class Mytest { public static void main(String[] args) { short a = 1; int b=2; //a = a+b; a +=b; } }
先编译一下,在反编译
得到
public class Mytest { public static void main(String[] args) { short a = 1; int b = 2; a = (short)(a + b); } }
了然~~。

浙公网安备 33010602011771号