2.6.2 算术运算符
Java中的算术运算符和其他大多数语言的都是相同的,也包含了加(+)、减(-)、乘(*)、除(/)以及取模(%)五种操作符。
我们先看看前三种算术运算符。这三种操作符和我们所知道的加、减、乘运算的法则没有区别。下面这个例子展示了算术操作符的用法:
//MathOp1.java
//算术运算符的示例。
public class MathOp1 {
public static void main(String[] args) {
int i,j,k;
i = 20;
j = 25;
k = i + j;
System.out.println("i + j: " + k);
k = i - j;
System.out.println("i - j: " + k);
k = i * j;
System.out.println("i * j: " + k);
double d, f, g;
d = 4.5;
f = 6.5;
g = d + f;
System.out.println("d + f: " + g);
g = d - f;
System.out.println("d - f: " + g);
g = d * f;
System.out.println("d * f: " + g);
}
}
/*输出结果:
i + j: 45
i - j: -5
i * j: 500
d + f: 11.0
d - f: -2.0
d * f: 29.25 */
接着我们再看除(/)以及取模(%)这两个操作符。除法运算大家应该都熟悉的,可是Java中的除运算符和C语言的一样,有一些特殊,那就是当运算符两边都是整数的话,那么得到的结果会直接去掉小数结果而保留整数部分。例如:6/4的结果是1而不是1.5;9/10的结果是0而不是0.9。而当除号(/)有一边是浮点型数据时,则得到的结果才会是浮点型的。例如:6.0/4的结果是1.5。而取模运算符(%)换个更容易记住的名词就是取余运算符(我不知道其他地方是怎么说的,反正我小学的时候老师教的就是取余运算)。一般来说,“%”两边应该是整数,结果是两个整数相除之后的余数,例如:4%6的结果是4;10%8的结果是2;8%2的结果是0。接着看下面的代码。
//MathOp2.java
//除以及取模运算符的示例。
public class MathOp2 {
public static void main(String[] args) {
int i,j,k;
i = 25;
j = 20;
k = i / j;
System.out.println("i / j: " + k);
k = i % j;
System.out.println("i % j: " + k);
double d,f,g;
d = 25.0;
f = 20.0;
g = d / f;
System.out.println("d / f: " + g);
}
}
/*输出结果:
i / j: 1
i % j: 5
d / f: 1.25
*/
从这一节开始,我们的程序可能多一点,希望读者,特别是初学者,不要光想着看这些例子,重要的是需要电脑上将代码敲一敲,做一些练习,这样对于学编程是大有好处的。
2.6.3 ++ 与 --
学过C语言的人看着这两个符号应该都不陌生,它们就是大名鼎鼎的自加与自减运算符,在我的印象中,C语言首先使用它们。可能初学者会问,为什么会出现这两个奇怪的运算符?因为在程序设计中,像 i=i+1 这样的运算经常用在循环语句中,所以C语言的设计者从简单性考虑,设计了这两个运算符。
自加运算符(++)表示将变量的值增加1,而自减运算符(--)表示将变量的值减少1。让我们看看下面的代码片段(注意一点,这两个运算符必须要挨着变量才行)。
int i=10, j=5;
i++; //相当于 i=i+1; 运行该条语句之后,i的值等于11
j--; //相当于 j=j-1; 运行该条语句之后,j的值等于4
从上面的例子看来,这个自加和自减运算符好像一般,也没有什么了不起的。可是学过C语言的人应该知道,这两个运算符还有一个常让人搞糊涂的特点,就是这它们不但可以放在变量之前,还可以放在变量之后。我把上面的例子改改,就变成下面这样了。
int i=10, j=5;
++i;
--j;
运行这段代码之后,i的值是11,j的值等于4,与之前的例子没有什么不同。可是等我们看了下面这个例子,你就会明白这两个运算符不简单。
int i = 10,j=10,k,m;
k = ++i;
m = j++;
想想看i、j、k、m的值分别是多少呢?我就直接把答案说出来:i和j的值等于11,k的值也等于11,而m的值等于10。产生这种结果的原因如下:++或—放置在变量之前,表示先对变量进行运算,然后再使用变量的值;而放在变量之后,表示先使用变量的值(如果有赋值运算符的话,则把变量的值赋给其他变量),然后再对变量进行运算。所以对于k=++i来说,会先对i进行自加运算,运算完成后i的值等于11,然后再将i的值给k,这时k的值也等于11了;而对 m=j++ ,则是先取得j的值赋给m,这时m的值等于11,然后在对j进行自加运算,运算完成后,j的值等于11。上面只举了++的例子,--运算符也是一样,我就不再多说了。
码了这么多字,不知道有没有讲清楚。其实这两个运算符还不止这么简单,再给大家看个复杂的:m = i+++++j;是不是头晕了?那我把它稍微变一下:m=(i++) + (++j),这个能看清楚一些么?大家可以编个程序试试m、i和j的值各是多少。如果没想通也没关系,我不建议大家在程序中使用这么复杂的东西的,一切简单就好。
2.6.4 关系运算符
关系运算符用于对两个数值型的数据做比较。基本的关系运算符有六个:>(大于)、<(小于)、>=(大于或等于)、<=(小于或等于)、= =(等于)、!=(不等于)。如果运算符两端的数值的关系符合运算符的含义,则结果为“true”,否则为“false”。举几个例子:3>2的结果为true;4<=3的结果则为false;2.5 != 3的结果为true;’a’ = =’a’结果为true。从上面的几个例子中,大家想必看出来了,关系运算符基本上可以应用于所有的基本数据类型,为什么说基本呢,就是因为有布尔类型的缘故,两个布尔类型的数值不能进行“大于”或者“小于”的运算的。
另外,还需要让大家注意一点,书写到现在,我们主要考虑的是基本数据类型的操作,在之后的章节中,我们还会提到对象的操作。我们之后尤其要关注的是对象的等于操作,你会发现对于对象来说,比较两个对象如果只用“= =”运算符是远远不够的。