赋值运算符易错点
赋值运算符:= += -= *= /= %=
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型的范围,因此编译失败。