x+=i和x = x+i比较 -- 简单赋值和复合赋值

这两个赋值方式其实是有区别的,如果最后结果的类型和左操作数的类型一样,那么这两个表达式就完全等价

下面来看看两个例子来理解它们的区别:

编写一个程序使得x+=i合法, x = x+i; 不合法。

        public void assignment(){
        short x = 0;
        int i = 82345;
        x+=i ;
        System.out.println(x);
        }

输出结果:16809

原因:最后结果int 类型的82345对于short 类型来说太大的,自动产生的转型把int 类型的高位截掉了

若使用x=x+i则编译是通不过的,提示type mismatch,因为不能把int 类型的值赋值给short类型的值,需要强转:x = (short) (x+i);

总结:

1. 在java中有一种隐式的类型转换,在复合赋值表达式中,自动的将其所执行的计算的结果,转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响,但是,如果结果的类型比该变量的类型要宽,那么复合赋值操作将隐式的执行窄化操作的类型转换,所以上述两个表达式可能会造成编译错误。

2. 复合赋值表达式是很危险的,为了避免这种错误,不要将复合赋值操作符用于byte,short,char类型的变量上,在用于int时,要保证右侧表达式不是long,float,double,复合赋值用于float时,保证右侧不是double,防止编译器窄化。

 

posted @ 2017-05-15 21:23  测试人生-  阅读(1220)  评论(0编辑  收藏  举报