java:警示:short s1=1;s1=s1+1;short s1=1;s1+=1的问题

在复习java基础知识的时候,看到基础面试题中这样一道题:
 java:警示:short s1=1;s1=s1+1;short s1=1;s1+=1的问题

在百度了一番之后,才知道答案的依据,下面写出自己对这道题的理解,以及对自己的警示,

首先,基本数据类型有以下几种:整型--byte,short,int,long;浮点型--float,double;字符型--char;

布尔型--boolean。在使用整型和浮点型时,需要特别注意的点就是不同类型的转换,当java中的基本数值类型从低到高转换时,不需要特别的注意,但是在从高往低转换时,就需要注意类型的区别了,需要进行强制转换。比如int s=1,short a=(short)s,这样才是正确的,不然java会出现编译错误。

        在这道题中,s1=s1+1其实应该是这样的(short)s1=(short)s1+(int)1;这样就是从高(int)到低(short)转换,这样就可能出现数值溢出的问题,所以会出错。而后面的s1 +=1就不会报错,它的实际是这的:(short)s1=(short)(s1+1);至于为什么是这样,那就是系统默认的问题