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