zoukankan      html  css  js  c++  java
  • Java 之复合赋值运算符

     1.引入问题

      切入正题,看下面代码,结果应该是怎么样的

    public class App{
        public static void main( String[] args ){
        	
        	byte a=1 ;
        	int b = 10;
        	 a= a+b;
        	 
        	System.out.println(a); 
        	
        	a+=b;
        	System.out.println(a);
        }
    }
    

      这段代码的执行结果是什么??

    2. 执行结果

    。。。。。。。。。。。。。。。。。。。答案如下。。。。。。。。。。。。。。

    上面的代码的编译的时候会报错,编译失败。因为在函数内部第三行中,左边的a是byte类型,右边的a是byte类型 b是int类型,当a和b相加的时候就会进行类型提升。导致a+b的结果是int,把一个int型的值赋值给一个byte类型的时候自然会报错。但是a+=b;这行代码却是可以正常执行的,这是为什么呢?

    3. 结果分析

      关于第三行报错的原因上面已经说过了,但是a+=b;能够正常执行的原因是什么呢?根据JLS(Java语言规范)指出,复合赋值运算符表达式 E1 op= E2 等价于 E1 = (T)((E1) op (E2)) 其中T是E1的类型,但E1只会被求值一次。也就是说上面a+b的执行过程是这样的,a = (byte)(a+b);在赋值的时候发生了强制转换,所以是可以正常编译通过的。这样就解释了上面编译的结果了。

  • 相关阅读:
    HDU
    HDU
    CodeForces
    HDU——2955 Robberies (0-1背包)
    南京区域赛之后
    算法作业三-哈夫曼编码
    HDU
    POJ 1220 NUMBER BASE CONVERSION(进制转换,大数)
    HDU 1535 Invitation Cards(最短路)
    HDU 3572 Task Schedule(网络流+当前弧优化)
  • 原文地址:https://www.cnblogs.com/zhangminghui/p/4923583.html
Copyright © 2011-2022 走看看