short类型的+操作和++操作的区别,竟然没有一个正确答案.

今天再次在卫琴的论坛上看到有人问这样的问题:

short tmp = 0;

为什么tmp = tmp +1;错误但tmp ++;却正确.

用google和yahoo竟然搜索不到一个正确的答案.都说java程序员不需要关心底层,真的吗?

s+1中,+操作有两个操作数,JVM指令中+操作最小类型是int,byte,short,char都以iload,iadd来操作,

然后用i2b,i2s,i2c来转换回去,因为+操作在两个数中间,所以如果不手动转换,编译器根本不知道你要

转换成第一个操作数类型还是第二个操作数类型.

s++中,相当于s上的increment操作,目的操作数是s,它的类型确定是short,所以在iadd后,编译器会自动

调用i2s将int转换为short.

你不要以为1默认是int,所以tmp+1默认以最大类型来运算.试一下下面的运算就知道了:

short a = 0;

short b = 0;

short c = a +b;两个short不存在以最大类型运算被转换为int运算了吧?

实上它还是不行,因为short也只能用iload,iadd指令运算,所以short c = a+b也一定要手工转换.

你可能感兴趣的:(jvm,C++,c,Yahoo,Google)