`

short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确。为何?

阅读更多

     如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作符(=),而第一个表达式使用的是复合赋值操作符。Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。
      换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换。
     因此,复合赋值表达式可能是危险的。为了避免这种令人不快的突袭,请不要将复合赋值操作符作用于byte、short或char类型的变量。 
     因为S1short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。   
     后面的那个不会发生类型的提升,JAVA规范上说    e1+=e2    实际上是    e1=(T1)(e1+e2),其中T1是e1的数据类型。   s1+=1等效于   s1=(short)(s1+1),所以是正确的。

分享到:
评论

相关推荐

    java面试宝典

    由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。  对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊...

    Java基础面试题.doc

    1、String 是最基本的数据类型吗?...由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s

    JAVA面试题库大全.zip

    一. Java基础部分 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2、Java有没有goto?...为什么? 8、用最有效率的方法算出2乘以8等於几? 9、请设计一个一百亿的计算器 。。。。。

    java面试题

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。...为什么? 9 8、用最有效率的方法算出2乘以8等於几? 9 9、请设计一个一百亿的计算器 9

    java常见面试100题

    1. JAVA的基本数据类型有哪些 ? String 是不是基本数据类型 ? 7 2. 一个".java"源文件中是否可以包括多个类(不是内部类)?...为什么? 8 9. 用最有效率的方法算出2乘以8等於几? 8 10. 请设计一个一百亿的计算器 8

    Java面试宝典2014版

    为什么? 8、用最有效率的方法算出2乘以8等於几? 9、请设计一个一百亿的计算器 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11、"=="和equals方法究竟有什么区别?

    JAVA笔试题集锦(1-30)基础部分

    1、作用域public,private,protected,以及不写时的区别 ... (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译) 10、Java有没有goto 答:java中的保留字,现在没有在java中使用

    java面试笔试题大汇总

    为什么要有GC?  基础。   第九,String s = new String("xyz");创建了几个String Object?   第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?   第十一,short s1 = 1; s1 = s1 + 1;有什么...

    java_ms.rar_Math Class_java collection

    java面试笔试题大汇总 ~很全面 ... 第十一,short s1 = 1 s1 = s1 + 1 有什么错? short s1 = 1 s1 += 1 有什么错?  面试题都是很变态的,要做好受虐的准备。   第十二,sleep() 和 wait() 有什么区

    java各大软件公司的面试题的集和

    为什么要有GC? 基础。 第九,String s = new String("xyz");创建了几个String Object? 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 第十一,short s1 = 1; s1 = s1 + 1;有什么错?...

    Java面试宝典

    为什么? 9 8、用最有效率的方法算出2乘以8等於几? 9 9、请设计一个一百亿的计算器 9 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、...

    java经典面试题汇总

    (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译) 10、Java有没有goto 答:java中的保留字,现在没有在java中使用 11、数组有没有length()这个方法? String有没有length()这个...

    java面试总结

    为什么? 9 8、用最有效率的方法算出2乘以8等於几? 9 9、请设计一个一百亿的计算器 9 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、...

    java笔试题

    22、char 型变量中能不能存贮一个中文汉字,为什么? 23、抽象类(abstract class)和接口(interface)有什么异同? 24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 25、Java 中会存在内存...

    Java面试宝典(传说中的葵花宝典).doc

    由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。 对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊...

    Java基础面试题(总结最全面的面试题!!!)

    原理是什么==、hashcode和equals==equals()hashcode为什么要有hashcodehashcode和equals的相关规定JVM JDK 和 JRE 是什么JVMJDK和JREJava和C++的区别?基本类型字符型常量和字符串常量的区别?自动装箱与拆箱说说&和&&...

    每天十道面试题(第一天)

    文章目录1、面向对象的特征有哪些方面?2、public,private,protected修饰符的作用域,以及不写修饰符时的区别?3、String是最基本的数据类型吗?4、float型float f=3.4是否正确?5、语句float f=1.3;编译能否通过?6...

    2013年最全的JAVA面试题集,内部资料,绝对能帮助到你,不要后悔哦。

    9. short s1 = 1; s1 =s1 + 1;有什么错? short s1 =1; s1 += 1;有什么错? (难度1级) 10.int和Integer有什么区别? (难度1级) 11.toString方法的概述 12. Object类的概述 13. Collection和Collections的区别?...

Global site tag (gtag.js) - Google Analytics