3.2 操作符
本节教程描述了怎执行各种操作,比如算术和赋值操作。
一个操作符利用一个、两个或者三个运算对象来执行了一个函数。只需要一个运算对象的操作符称为单元运算符。例如++是一个单元操作符,它是对运算对象自增1。需要两个运算对象的操作符号称为双元操纵符。比如等于号(=)就是一个双元操作符,它指定右边的运算对象给左边的运算对象。最后,三元操作符需要三个运算对象。JAVA编程语言有一个三元运算符?:,它是一个简要的if-else语句。
单元操作符支持前缀或者后缀记号。前缀记号是指操作符出现在它的运算对象之前,例如:
operator op //前缀记号
后缀记号是指运算对象出现在操作符之前,例如:
op operator //后缀记号
所有的双元操作符使用中缀记号,即操作符出现在两个运算对象的中间:
op1 operator op2 //中缀记号
三元操作符也是使用中缀记号,例如:
op1 ? op2 : op3 //中缀记号
操作除了执行一个操作,还返回一个数值。返回数值和它的类型依靠于操作符号和运算对象的类型。比如,算术操作符它完成基本的算术操作(加、减)并且返回数值作为算术操作的结果。由算术操作符返回的数据类型依靠于它的运算对象的类型:如果你对两个整型数相加,你就会得到一个整型数。
我们可以将操作符分成以下几类:
算术运算符
关系和条件运算符
移位和逻辑运算符
赋值运算符
其它的运算符
下面我们逐个介绍。
JAVA编程语言为所有的浮点型和整型数支持多种算术运算符。这些运算符为+(加)、-(减)、*(乘)、/(除)以及%(模)。下面的表总结了双元算术运算符。
以下有一个例程,ArithmeticDemo,它定义了两个整型数和两个双精度的浮点数并且使用五种算术运算符来完成不同的运算操作。这个程序同时使用了+符号来连接字符串。程序如下:
public class ArithmeticDemo {
public static void main(String[] args) {
//定义几个数
int i = 37;
int j = 42;
double x = 27.475;
double y = 7.22;
System.out.println("变量数值...");
System.out.println(" i = " + i);
System.out.println(" j = " + j);
System.out.println(" x = " + x);
System.out.println(" y = " + y);
//加
System.out.println("加...");
System.out.println(" i + j = " + (i + j));
System.out.println(" x + y = " + (x + y));
//减
System.out.println("减...");
System.out.println(" i - j = " + (i - j));
System.out.println(" x - y = " + (x - y));
//乘
System.out.println("乘...");
System.out.println(" i * j = " + (i * j));
System.out.println(" x * y = " + (x * y));
//除
System.out.println("除...");
System.out.println(" i / j = " + (i / j));
System.out.println(" x / y = " + (x / y));
//从除法中求得余数
System.out.println("计算余数...");
System.out.println(" i % j = " + (i % j));
System.out.println(" x % y = " + (x % y));
//混合类型
System.out.println("混合类型...");
System.out.println(" j + y = " + (j + y));
System.out.println(" i * x = " + (i * x));
}
}
这个程序得输出为:
变量数值...
i = 37
j = 42
x = 27.475
y = 7.22
加...
i + j = 79
x + y = 34.695
减...
i - j = -5
x - y = 20.255
乘...
i * j = 1554
x * y = 198.37
除...
i / j = 0
x / y = 3.8054
计算余数...
i % j = 37
x % y = 5.815
混合类型...
j + y = 49.22
i * x = 1016.58
这里注意,当一个整数和一个浮点数用为运算符来执行单一算术操作的时候,结果为浮点型。整型数是在操作之前转换为一个浮点型数的。下面的表总结了根据运算对象的数据类型由算术操作符返回的数据类型。它们是在操作执行之前进行数据转换的。
除了双元的运算符+和-,还有以下单元运算符:
另外两个简练的算术操作符为++和--。++是完成自加1的作用;而—是完成自减的作用。不管是++还是—都可能出现在运算对象的前面(前缀)或者后面(后缀),但是它们的作用是不一样的。前缀的格式为:++op或--op,它实现了在加/减之后才计算运算对象的数值;而后缀的格式为:op++或op--,它实现了在加/减之前就计算运算对象的数值。
下面的程序SortDemo中使用两次++和一个--,如下:
public class SortDemo {
public static void main(String[] args) {
int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076,
2000, 8, 622, 127 };
for (int i = arrayOfInts.length; --i >= 0; ) {
for (int j = 0; j < i; j++) {
if (arrayOfInts[j] > arrayOfInts[j+1]) {
int temp = arrayOfInts[j];
arrayOfInts[j] = arrayOfInts[j+1];
arrayOfInts[j+1] = temp;
}
}
}
for (int i = 0; i < arrayOfInts.length; i++) {
System.out.print(arrayOfInts[i] + " ");
}
System.out.println();
}
}
这个程序将10整型数值放置在一个数组arrayOfInts中。这个程序使用了arrayOfInts.length来获得数组中的元素个数。单个的元素可以由arrayOfInts[index]来访问,这里index是一个整型数,它指示数组中元素的位置。这里一定要注意index的下标是从0开始的。
这个程序的作用是输出从小到大的10个整数,结果为:
3 8 12 32 87 127 589 622 1076 2000
还是让我们好好看看这个SortDemo程序是怎样工作的。下面是控制外部循环的语句:
for (int i = arrayOfInts.length; --i >= 0; ) {
...
}
这个for语句是一个循环结构。其中--i >= 0给出了循环的条件,即--i大于等于0就继续循环,一旦小于0就结束循环。使用前缀--意味着最后的一次循环迭代是发生在当i等于0的时候。如果我们改变改变一下使用后缀的,那么循环迭代的最后一次发生在当i等于-1的时候,这样就会发生错误,因为数组的下标是从0开始的,-1是一个无效的数组下标。
程序中其它两个循环使用了后缀的++。在两个例子中,使用前缀或者后缀是没有问题的。当其中一个运算符号返回的数值没有用到,则约定使用后缀的。
下面的表格总结自增/自减运算符: