赋值运算符易错点

赋值运算符:=  +=  -=  *=  /=  %=

 

1.

public class operationDemo
{

public static void main(String[] args)
{
short i=3;
i+=4;
System.out.println("i="+i);
}
}

 

 

如图我们可以知道编译通过并成功得到结果,接下来我们看看下一段代码:

2.

public class operationDemo
{

public static void main(String[] args)
{
short i=3;
//i+=4;
i=i+4;
System.out.println("i="+i);
}
}

报错了,精度可能会流失,无法通过编译。

分析:

1. 首先看这一句:short i = 4 ;

  在这里,i是short型,占两个字节,而4默认是int型,占4个字节。首先检查右边的值是否在左边的范围之内,如果在,则进行强制类型转化操作,在底层将4强制转化为short型,再进行赋值操作,因此赋值成功。

2.再来看这一句:i +=3;  在这里,+=同样是赋值运算符,和上面原理一样,系统先求左右两边的和,看看是否再左边的范围之内,如果在,则将求得的和强制转化为short型然后赋值给左边。

3.接下来看这一句:i=i+3; 先看右边,i + 3,i是short型,3是int型,自动往高位转化,因此右边是int型,占4位,而赋值号左边是short型,占2位,如果右边赋值给左边的话会造成精度流失,因此无法通过编译。

4.第二段代码编译失败的另一种解释:i=i+3;    在这里,右边的i 是一个变量,它的值是变化的,无法确定它的值加上3之后是否会超出short型的范围,因此编译失败。

 

posted on 2017-10-25 23:58  hyzhu_lucky  阅读(454)  评论(0编辑  收藏  举报