s+=1 和 s=s+1看了这篇,你会明白好多自己不知道的(对小白)

s+=1和s=s+1区别

  • 下面的代码会报错,知道为什么么?
	short s = 1;
    s = s + 1;

因为:1是int型,s+1会自动将s转化为int型进行运算,结果就是int型,

果将int直接赋值给short会报错,高到第的转化需要强转.

  • 正确的写成下面这样
		//注意加两个括号
		short s = 1;
        s = (short) (s + 1);
  • 如果改成这样会对么?
    short s = 1;
    s = s + (short)1;
  • 告诉你这样也是错的,为什么呢?(记住就行)
  1. JAVA中short和short相加自动转化为int
  2. 精度小于int的数值运算的时候都回被自动转换为int后进行计算
  • 下面的也可以,那么问题来了,这个为啥这样可以?
//这样也可以实现s加1;更为简单 	
short s = 1;
        s+=1;
  1. s += 1是等价于 s = (s的数据类型)(s + 1)
  2. 对于+= -=,*=等系统会自动执行类型转换操作
  3. 更深层次涉及到jvm如何实现(实话说我还不够格,以后回来补上的)
  • 下面的代码不报错,这不是int转short么,为什么?
short s = 1 + 2;
  1. 因为你要知道常量池优化:在给变量进行赋值的时候,如果左边全是常量,没有任何变量的时候,那么java的编译器会直接计算右边的结果,然后赋值给左边变量,相当于short s=3;如果常量运算的值超过范围就会报编译错误.

可以看看这个链接,写的非常明白

  • 想要再深入细节的可以自己搜,后期会把虚拟机实现方式补下.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值