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也一定要手工转换.

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值