算术运算符用在数学表达式中,其用法和功能与代数学(或其他计算机语言)中一样,
算术运算符及其含义

算术运算符的运算数必须是数字类型。算术运算符不能用在布尔类型上,但是可以用
在char类型上,因为实质上在Java中,char类型是int类型的一个子集。
基本算术运算符——加、减、乘、除可以对所有的数字类型操作。减运算也用作表示
单个操作数的负号。记住对整数进行“/”除法运算时,所有的余数都要被舍去。
下面这个简单例子示范了算术运算符,也说明了浮点型除法和整型除法之间的差别。
- class BasicMath {
- public static void main(String args[]) {
- // arithmetic using integers
- System.out.println("Integer Arithmetic");
- int a = 1 + 1;
- int b = a * 3;
- int c = b / 4;
- int d = c - a;
- int e = -d;
- System.out.println("a = " + a);
- System.out.println("b = " + b);
- System.out.println("c = " + c);
- System.out.println("d = " + d);
- System.out.println("e = " + e);
- // arithmetic using doubles
- System.out.println("\nFloating Point Arithmetic");
- double da = 1 + 1;
- double db = da * 3;
- double dc = db / 4;
- double dd = dc - a;
- double de = -dd;
- System.out.println("da = " + da);
- System.out.println("db = " + db);
- System.out.println("dc = " + dc);
- System.out.println("dd = " + dd);
- System.out.println("de = " + de);
- }
- }
当你运行这个程序,你会看到输出如下:
- Integer Arithmetic
- a = 2
- b = 6
- c = 1
- d = -1
- e = 1
- Floating Point Arithmetic
- da = 2.0
- db = 6.0
- dc = 1.5
- dd = -0.5
- de = 0.5
模运算符%,其运算结果是整数除法的余数。它能像整数类型一样被用于浮点类型(这
不同于C/C++,在C/C++中模运算符%仅仅能用于整数类型)。下面的示例程序说明了模运
算符%的用法:
- class Modulus {
- public static void main(String args[]) {
- int x = 42;
- double y = 42.25;
- System.out.println("x mod 10 = " + x % 10);
- System.out.println("y mod 10 = " + y % 10);
- }
- }
当你运行这个程序,你会看到输出如下:
- x mod 10 = 2
- y mod 10 = 2.25
Java提供特殊的算术赋值运算符,该运算符可用来将算术运算符与赋值结合起来。你可能知道,像下列这样的语句在编程中是很常见的:
a = a +4;
在Java中,你可将该语句重写如下:
a += 4;
该语句使用“+=”进行赋值操作。上面两行语句完成的功能是一样的:使变量a的值增
加4 。下面是另一个例子:
a = a % 2;
该语句可简写为:
a %= 2;
在本例中,%=算术运算符的结果是a/2的余数,并把结果重新赋给变量a。
这种简写形式对于Java的二元(即需要两个操作数的)运算符都适用。其语句格式为:
var= var op expression;
可以被重写为:
var op= expression;
这种赋值运算符有两个好处。第一,它们比标准的等式要紧凑。第二,它们有助于提
高Java的运行效率。由于这些原因,在Java的专业程序中,你经常会看见这些简写的赋值运
算符。
下面的例子显示了几个赋值运算符的作用:
- class OpEquals {
- public static void main(String args[]) {
- int a = 1;
- int b = 2;
- int c = 3;
- 54 第 1 部分 Java 语言
- a += 5;
- b *= 4;
- c += a * b;
- c %= 6;
- System.out.println("a = " + a);
- System.out.println("b = " + b);
- System.out.println("c = " + c);
- }
- }
该程序的输出如下:
- a = 6
- b = 8
- c = 3
“++”和“–”是Java的递增和递减运算符。下面将对它们做
详细讨论。它们具有一些特殊的性能,这使它们变得非常有趣。我们先来复习一下递增和
递减运算符的操作。
递增运算符对其运算数加1,递减运算符对其运算数减1。因此:
x = x + 1;
运用递增运算符可以重写为:
x++;
同样,语句:
x = x - 1;
与下面一句相同:
x–;
在前面的例子中,递增或递减运算符采用前缀(prefix)或后缀(postfix)格式都是相
同的。但是,当递增或递减运算符作为一个较大的表达式的一部分,就会有重要的不同。
如果递增或递减运算符放在其运算数前面,Java就会在获得该运算数的值之前执行相应的
操作,并将其用于表达式的其他部分。如果运算符放在其运算数后面,Java就会先获得该
操作数的值再执行递增或递减运算。例如:
x = 42 ;
y =++x ;
在这个例子中,y将被赋值为43,因为在将x的值赋给y以前,要先执行递增运算。这样,
语句行y =++x ;和下面两句是等价的:
x = x + 1;
y = x;
但是,当写成这样时:
x = 42;
y = x++;
在执行递增运算以前,已将x的值赋给了y,因此y的值还是42 。当然,在这两个例子
中,x都被赋值为43。在本例中,程序行y =x++;与下面两个语句等价:
y = x;
x = x + 1;
下面的程序说明了递增运算符的使用:
- class IncDec {
- public static void main(String args[]) {
- int a = 1;
- int b = 2;
- int c;
- int d;
- c = ++b;
- d = a++;
- c++;
- System.out.println("a = " + a);
- System.out.println("b = " + b);
- System.out.println("c = " + c);
- System.out.println("d = " + d);
- }
- }
该程序的输出如下:
- a = 2
- b = 3
- c = 4
- d = 1