前面曾经说过 java(TM) 和 C 一样,是一门语法功能很强的编程语言,它支持一些很酷的多功能运算符,如下表所示:
多功能运算符 解释
++ 递增 (加 1)
-- 递减 (减 1)
+= 增加(加指定值)
-= 减少(减指定值)
*= 乘(乘以指定值)
/=除(除以指定值)
&= 位与 (和指定值)
= 位同或(和指定值)
^= 位异或(和指定值)
%=整除取余(除以指定值求余数)
这些运算符(实际是运算符的组合)组合了多个运算:表达式求值后赋给变量,从这个意义上说,他们是多功能运算符。例如,x++ 首先取 x 的值,再将值加 1, 然后将结果赋回给 x,并 "取" x 的初始值作为表达式的最终值。与此对比,++x 首先取 x 的值,再将值加 1,然后将结果赋回给 x, 并取 x 的新值作为表达式的最终值。
请注重当x++ 和 ++x 是独立语句,其唯一的任务就是使变量加一,也就是说可以忽略表达式的最终值时,他们是等价的:
int x = 4;
x++; // same effect as ++x
System.out.PRintln("x = " + x);
这段代码产生如下输出:
x = 5
调用 println()时,参数是字符串 "x = " 和由 x 转换的字符串的连接。字符串运算,包括字符串连接号 + 的使用,都将在 Strings 中讲述。
在下面的上下文中,递增运算符的位置很重要:
int x = 4;
int y = x++;
int z = ++x;
System.out.println( "x = " + x + " y = " + y + " z = " + z);
这段代码产生输出:
x = 6 y = 4 z = 6
下表是一些例子和相应的解释
请注重 Java 中,位运算 & 和 ^ 仅能用于整型值,这样才有意义。二进制运算的内容在很多计算机科学的入门文章中都有介绍。
用递减运算符我们可以将 bark() 中的循环操作写得更加简练:
void bark(int times) {
while (times 0) {
System.out.println(barkSound);
times--;
}
}
还可以进一步精简为:
void bark(int times) {
while (times-- 0)
System.out.println(barkSound);
}
此例中,我们将 times 的最终值用在了 while 结构的布尔表达式中来控制循环(使循环继续)。更明白地说,times-- 将变量递减但在大于比较运算之前取初始值用于计算得到表达式的值。