[java基础]short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 += 1;有什么错?

为什么写这篇文章是因为搜到的答案里并没有阐明s1 = s1 + 1为什么就要转换为int类型。

由一下实验可知:

public class test {
    public static void main(String[] args) {
        short s1 = 1;
        s1+=1;
//       获取1的数据类型并打印   class java.lang.Integer
        System.out.println(getType(1));
//       获取s1的数据类型并打印  class java.lang.Short
        System.out.println(getType(s1));
    }
    public static String getType(Object o){ //获取变量类型方法
        return o.getClass().toString(); //使用int类型的getClass()方法
    }
}

1默认的数据类型为class java.lang.Integer,所以需要进行强制类型转换。

那么为什么s1+=1就不需要强制强制转换呢?

Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。   换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换。  
---------------------
作者:Ai2015WER
来源:CSDN
原文:https://blog.csdn.net/hurryjiang/article/details/9256959 

另外,本文还参考了https://www.cnblogs.com/smuxiaolei/p/7692392.html,在此感谢!!

posted @ 2019-01-10 09:47  ApolloAI  阅读(415)  评论(1编辑  收藏  举报