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

2019-01-10 07:49:04来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

为什么写这篇文章是因为搜到的答案里并没有阐明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,在此感谢!!

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:springcloud之config配置中心-Finchley.SR2版

下一篇:Java面向对象概述及三大特征(封装,继承和多态)