您的位置:澳门402永利com > 编程应用 > 有怎么着错

有怎么着错

发布时间:2019-09-23 20:45编辑:编程应用浏览(188)

    为啥写那篇作品是因为搜到的答案里并不曾表达s1 = s1 + 1为何将在退换为int类型。

    Java规范有像这种类型的条条框框:

    由一下推行能够:

    1. 高位转低位要求强制调换
    2. 没有转高位自动转.
    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;    }    public static String getType{ //获取变量类型方法        return o.getClass().toString(); //使用int类型的getClass()方法    }}
    

    1暗中同意的数据类型为class java.lang.Integer,所以须要张开强制类型调换。

    short s1 = 1;
    s1 = s1 + 1;  有什么错?
    
    short s2 = 1;
    s2 += 1;
    

    那就是说为何s1+=1就没有供给强制强制转变呢?

    short s1 = 1; s1 = s1 + 1;有哪些错?
    s1是short型,1是short型,通过+运算符,计算的时候s1调换为int型,最终把s1+1赋值给s1的时候,s1是short型,所以出错。
    short s1 = 1; s1 += 1;有如何错?
    设若您以为表明式x+=i只是表明式x=x+i的简写格局,那并不标准。
    那五个表明式都被称之为赋值表明式。x=x+i表明式使用的是简轻巧单赋值操作符=,而x+=i表明式使用的是复合赋值操作符。Java语言专门的学问中讲到,复合赋值E1 op =E2等价于轻便赋值(E1=(T)((E1) op (E2))),在这之中T是E1的档期的顺序,除非E1只被计算三遍。换句话说,复合赋值表达式自动地将所实践总括的结果转型为其侧边变量的类型。如若结果的品种与该变量的档期的顺序同样,那么那一个转型不会产生任何影响。可是,假使结果的项目比该变量的品种要宽,那么复合赋值操作符将悄悄地施行二个窄化原生类型转变。
    进而,复合赋值表明式大概是死里逃生的。为了防止这种令人痛心的突袭,请不要将复合赋值操作符成效于byte、short或char类型的变量。 因为s1是short型的,占2个字节,而1是int型的,占4个字节。在七个品种的值相加的时候,会爆发自动类型的升级,也正是说s1+1后,其结果是int型的,实际不是short型的,所以可以想想看,把4个字节的事物放在多个字节的上空里,确定编写翻译不经过。

    Java语言专门的工作中讲到,复合赋值等价于简单赋值 style="color: #ff0000; font-size: 18pt"> op ,个中T是E1的体系,除非E1只被总结贰遍。

    换句话说,复合赋值表明式自动地将所实行总计的结果转型为其右边变量的项目。要是结果的品种与该变量的花色一样,那么这一个转型不会招致任何影响。可是,即便结果的品类比该变量的类型要宽,那么复合赋值操作符将悄悄地试行二个窄化原生类型调换。

    作者:Ai2015WER
    来源:CSDN
    原文:

    背后的那多少个不会发出类型的升迁,JAVA规范上说e1+=e2事实上是e1=(T1)(e1+e2) ,个中T1是e1的数据类型。 s1+=1等效于s1=(short)(s1+1),所以是没有错的。

    除此以外,本文还参谋了

    本文由澳门402永利com发布于编程应用,转载请注明出处:有怎么着错

    关键词:

上一篇:没有了

下一篇:没有了