关于java中的赋值运算
赋值运算符包括两种:
基本的赋值运算符:
=
扩展的赋值运算符
+=
-=
*=
%=
1.赋值类的运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量。
2.注意以下代码:
byte i = 10; i += 5;等同于: i = (byte)(i + 5); int k = 10; k += 5;等同于:k = (int)(k + 5); long x = 10L; int y = 20; y += x;等同于:y = (int)(y + x);
3.重要结论:扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的类型是
byte类型,无论怎么进行追加或追减,最终该变量的数据类型还是byte类型。
public class OperatorTest04{ public static void main(String[] args){ //基本的赋值运算符 int i = 10; System.out.println(i);//10 //扩展的赋值运算符 i += 5; System.out.println(i);//15 i -= 5; System.out.println(i);//10 /* //编译报错 //编译器只检查语法,不运行程序,编译器发现x+5的类型是int类型,b变量的数据类型是byte //大容量向小容量转换需要加强制类型转换符,所以以下程序编译报错。 byte x = 10; x = x + 5; System.out.println(x); */ //纠正错误 byte b = 10; b = (byte)(b + 5); System.out.println(b);//15 byte x = 10; x += 5;//等同于: x = (byte)(x + 5),其实并不等同于:x = x + 5 System.out.println(x);//15 byte z = 0; z += 128;//等同于:z = (byte)(z + 128); System.out.println(z);//-128[损失精度] z += 10000;//等同于:z = (byte)(z + 10000) System.out.println(z);/*结果为-112 详解:byte类型的取值范围(-128,127)|(256);所以10000已经超出范围 10000%256=16(39),余数是16,循环39次,-128+127=256,所以256 为一次循环,经历39次循环后,用byte的最小值-128加16即-128+16=-112。 */ } }