Java 之复合赋值运算符

 1.引入问题

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

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. 执行结果

。。。。。。。。。。。。。。。。。。。答案以下。。。。。。。。。。。。。。blog

上面的代码的编译的时候会报错,编译失败。由于在函数内部第三行中,左边的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);在赋值的时候发生了强制转换,因此是能够正常编译经过的。这样就解释了上面编译的结果了。class

相关文章
相关标签/搜索