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