
2.5.5 赋值运算符
赋值运算符就是将常量、变量、表达式的值赋给某一个变量或对象,赋值表达式由变量、赋值运算符和表达式组成。赋值运算符包括“=”赋值运算符和扩展赋值运算符两种。Java中的赋值运算符和使用示例,如表2.8所示。
表2.8 赋值运算符

赋值语句的结果是将右侧的值(或表达式结果)赋给左边的变量。变量在进行普通赋值时,如果赋值运算符两侧的类型彼此不一致,或者左边类型取值范围小于右边类型时,需要进行自动或强制类型转换。也就是说,变量从占用内存较少的短数据类型转换为占用内存较多的长数据类型时,会自动进行隐式转换;而将变量从较长的数据类型转换为较短的数据类型时,则必须进行强制类型转换,也就是采用“(类型)表达式”。赋值运算符也可以采取右端表达式继续赋值的方式,形成连续赋值的情况,但是一般不建议使用该方式进行赋值,会降低程序的可读性。赋值运算符的使用示例如下:
int n = 5; // 声明并赋值 int a, b, c; // 连续声明 a = b = c = 5; // 多个变量同时赋值,表达式等价于c = 5;b = c;a = b; int a = 1; byte b = 3; b = a + b; // 错误,将int类型赋值给byte类型变量需要强制转换 b = (byte)(a + b); // 正确
在赋值运算符“=”前加上其他运算符,即构成扩展赋值运算符,如a += 7等价于a = a + 7。也就是说,扩展赋值运算符是先进行某种运算之后,再对运算的结果进行赋值。扩展赋值运算符的优点是可以使程序表达简洁,并且能提高程序的编译速度。编译器首先会进行运算,再将运算结果赋值给变量。具体示例如下:
int a = 3; // 声明变量a a += 1; // a = 4;等价于a = a + 1; a *= 2; // a = 6;等价于a = a * 2;
接下来,通过案例来演示赋值运算符的使用,如例2-8所示。
【例2-8】 Demo0208.java

程序的运行结果如下:
--------赋值运算符和赋值表达式案例-------- a=18,b=9,c=9 a+=c;a=27 a-=c;a=18 a*=c; a=162 a/=c; a=18 a%=c-2;a=4,c=9
例2-8中,第5行代码使用了赋值运算符的连续赋值,先将差值赋值给b,然后再赋值给c。第8行、第10行、第12行、第14行代码分别表示操作数a对c的相加后赋值、相减后赋值、相乘后赋值、相除后赋值。第16行代码,先计算右侧c-2,因为c的值是9,所以右侧减2之后结果为7,a的值为18,对7求余,结果为4。
注意:使用赋值运算符需要注意如下两点:
(1)要注意数据类型匹配,如boolean flag = 23就是类型不匹配,无法自动转换。
(2)不能为运算式赋值,如“int a = 8,b = 9;a + b = 28;”,这是语法错误。