運算符指明對操作數(shù)所進行的運算。按操作數(shù)的數(shù)目來分,可以有一元運算符(如++、--),二元運算符(如+、>)和三元運算符(如?:),它們分別對應于一個、兩個和三個操作數(shù)。對于一元運算符來說,可以有前綴表達式(如++i)和后綴表達式(如i++),對于二元運算符來說則采用中綴表達式(如a+b)。按照運算符功能來分,基本的運算符有下面幾類:
1.算術(shù)運算符(+,-,*,/,%,++,--)
2.關(guān)系運算符(>,<,>=,<=,==,!=)
3.布爾邏輯運算符(!,&&,||)
4.位運算符(>>,<<,>>>,&,|,^,~)
5.賦值運算符(=,及其擴展賦值運算符如+=)
6.條件運算符(?:)
7.其它(包括分量運算符·,下標運算符[],實例運算符instanceof,內(nèi)存分配運算符new,強制類型轉(zhuǎn)換運算符(類型),方法調(diào)用運算符()等)
本章中我們主要講述前6類運算符。
3.1算術(shù)運算符
算術(shù)運算符作用于整型或浮點型數(shù)據(jù),完成算術(shù)運算。
一、二元算術(shù)運算符,如下表所示
運算符用法描述
+op1+op2加
-op1-op2減
*op1*op2乘
/op1/op2除
%op1%op2取模(求余)
Java對加運算符進行了擴展,使它能夠進行字符串的連接,如"abc"+"de",得到串"abcde"。我們將在第七章中講解。
與C、C++不同,對取模運算符%來說,其操作數(shù)可以為浮點數(shù),如37.2=7.2。
二、一元算術(shù)運算符,如下表所示:
運算符用法描述
++op正值
--op負值
++++op,op++加1
----op,op--減1
i++與++i的區(qū)別
i++在使用i之后,使i的值加1,因此執(zhí)行完i++后,整個表達式的值為i,而i的值變?yōu)閕+1。
++i在使用i之前,使i的值加1,因此執(zhí)行完++i后,整個表達式和i的值均為i+1。
對i--與--i同樣。
例3.1.下面的例子說明了算術(shù)運算符的使用
publicclassArithmaticOp{
publicstaticvoidmain(Stringargs[]){
inta=5+4;//a=9
intb=a*2;//b=18
intc=b/4;//c=4
intd=b-c;//d=14
inte=-d;//e=-14
intf=e%4;//f=-2
doubleg=18.4;
doubleh=g%4;//h=2.4
inti=3;
intj=i++;//i=4,j=3
intk=++i;//i=5,k=5
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);
System.out.println("f="+f);
System.out.println("g="+g);
System.out.println("h="+h);
System.out.println("i="+i);
System.out.println("j="+j);
System.out.println("k="+k);
}
}
其結(jié)果為:
C:\>javaArithmaticOp
a=9
b=18
c=4
d=14
e=-14
f=-2
g=18.4
h=2.4
i=5
j=3
k=5
3.2關(guān)系運算符
關(guān)系運算符用來比較兩個值,返回布爾類型的值true或false。關(guān)系運算符都是二元運算符,如下表所示:
運算符用法返回true的情況
>op1>op2op1大于op2
>=op1>=op2op1大于或等于op2
<op1<op2op1小于op2
<=op1<=op2op1小于或等于op2
==op1==op2op1與op2相等
!=op1!=op2op1與op2不等
Java中,任何數(shù)據(jù)類型的數(shù)據(jù)(包括基本類型和組合類型)都可以通過==或!=來比較是否相等(這與C、C++不同)。
關(guān)系運算的結(jié)果返回true或false,而不是C、C++中的1或0。
關(guān)系運算符常與布爾邏輯運算符一起使用,作為流控制語句的判斷條件。如
if(a>b&&b==c)
3.3布爾邏輯運算符
布爾邏輯運算符進行布爾邏輯運算,如下表所示:
op1op2op1&&op2op1||op2!op1
falsefalsefalsefalsetrue
falsetruefalsetruetrue
truefalsefalsetruefalse
truetruetruetruefalse}
·&&、‖為二元運算符,實現(xiàn)邏輯與、邏輯或。
·!為一元運算符,實現(xiàn)邏輯非。
·對于布爾邏輯運算,先求出運算符左邊的表達式的值,對或運算如果為true,則整個表達式的結(jié)果為true,不必對運算符右邊的表達式再進行運算;同樣,對與運算,如果左邊表達式的值為false,則不必對右邊的表達式求值,整個表達式的結(jié)果為false。
下面的例子說明了關(guān)系運算符和布爾邏輯運算符的使用。
publicclassRelationAndConditionOp{
publicstaticvoidmain(Stringargs[]){
inta=25,b=3;
booleand=a<b;//d=false
System.out.println("a<b="+d);
inte=3;
if(e!=0&&a/e>5)
System.out.println("a/e="+a/e);
intf=0;
if(f!=0&&a/f>5)
System.out.println("a/f="+a/f);
else
System.out.println("f="+f);
}
}
其運行結(jié)果為:
C:\>javaRelationAndConditionOp
a<b=false
a/e=8
f=0
注意:上例中,第二個if語句在運行時不會發(fā)生除0溢出的錯誤,因為e!=0為false,所以就不需要對a/e進行運算。

