運算符是一種特殊的符號,用以表示數據的運算,賦值,比較等,java中有以下類型運算符
1.算數運算符
java支持所有的基本算術運算符,這里介紹7種基本算術運算符
+:加法運算符,字符串的連接符
-:減法運算符,求負運算符
*:乘法運算符
/:除法運算符
%:求余運算符
++:自加運算符
--: 自減運算符
自加和自減:
1)自加和自減都是彈幕運算符,只能操作一個操作數,只能操作單個數值型的變量,不能操作常量或表達式
2)運算符可以出現在操作數左邊或右邊,如果運算符出現在左邊,則先把操作數自增或自減再放入表達式中運算
如果運算符出現在操作數右邊,則先進行表達式運算再自增自減
注意點:
1)除法運算的兩個特殊性。a.如果兩個操作數都是整數類型,則計算結果也是整數,就是將自然除法的結果截斷取 整,
例如15/4的結果是3,不是4。兩個操作數都是整數類型,則除數不能為0,否則引發算數異常。
b.如果兩個操作數有一個或兩個是浮點數,結果為自然除法的浮點數。而且此時允許除數可以為0或0.0,結果為正無窮大或負無窮大
2)求余的運算結果不一定是整數,它的計算結果是整除結果剩下的值。因為求余運算也經過除法運算,遵循除法運算的第一個特殊性。
但是如果兩個操作數有一個以上是浮點數,第二個數值為0或0.0時,求余的結果是非數NaN。0或0.0對非0的任何數求余將得到0或0.0;
public static void main(String[] args) { double a = 5.2; double b = 3.1; System.out.println(a%b); System.out.println("5對0.0的求余結果是:"+5%0.0); System.out.println("0對5的求余結果是:"+0%5); System.out.println("0對5的求余結果是:"+0%5); System.out.println("0對0.0的求余結果是:"+0%0.0); //下面語句拋出異常 // System.out.println("5對0的求余結果是:"+5%0); int c = 5; int f = 5; int d = c+++3; int e = ++f+3; System.out.println(c); System.out.println(f); System.out.println(d); System.out.println(e); c = -c; System.out.println(c); }
輸出:
2.1
5對0.0的求余結果是:NaN
0對5的求余結果是:0
0對5的求余結果是:0
0對0.0的求余結果是:NaN
6
6
8
9
-6
2.賦值運算符
java中支持"="號作為運算符,其格式為: 裝入的變量=直接量或變量,java支持連續賦值,但可讀性低不推薦
3.比較運算符
比較運算符通常用於比較兩個變量或常量的大小,返回的結果為布爾值true或false
>:大於號。比較運算符左右兩邊數值類型的變量或常量是否左邊大於右邊
>:小於號。比較運算符左右兩邊數值類型的變量或常量是否左邊小於右邊
>=:大於等於號。比較運算符左右兩邊數值類型的變量或常量是否左邊大於或等於右邊
<=:大於等於號。比較運算符左右兩邊數值類型的變量或常量是否左邊小 於或等於右邊
==:等於號。 可以比較數值類型,boolean類型和引用類型。只有兩個引用類型具有父子關系時
才可以比較,且指向同一個對象時才返回true。比較數值類型時,只要數值相等就返回true,
例如‘a'==97返回true
4.邏輯運算符
邏輯運算符操作兩個布爾型的變量或常量
&&:與。前后兩個操作數返回true才返回true
&:不短路與。
||:或。前后兩個操作數返回false才返回false
|:不短路或。
!:非。只有一個操作數。true的非操作為false,false的非操作為true
^:異或。操作數不同時返回true,相同時返回false
注意:對於&和&&的區別,都進行兩個操作數的邏輯運算,當第一個操作數為false時,&&不會進行右邊操作數的運算,
第二操作數被短路,但使用&仍然會執行第二個操作數的運算,第二個操作數不會被短路,但是最總返回的結果跟&& 一樣。
|和||的區別解釋同理
public static void main(String[] args) { System.out.println("!false的結果是"+!false); System.out.println(4>=5||'c'>'a'); System.out.println(4>=5^'c'>'a'); int a = 97; int b = 36; if(a>54 || ++a>97){ System.out.println(a);//a得不到自加運算 if(b>24 | ++b>36){ System.out.println(b);//b得到自加運算 } } }
輸出:
!false的結果是true
true
true
97
37
5.位運算符
java支持7個位運算符:&,|,~,^,<<,>>,>>>。一般來說,位運算符只能操作整數類型的變量或值
位運算符,都是計算機底層補碼操作
&:按位與,當兩位同時為1時才返回1
|:只要有一位為1時就返回1
~:單目運算符,將操作數在計算機底層的二進制碼的每個位全部取反
^:按位異或,當兩位相同時時返回0,不同時返回1
<<:左移運算符,移位后以0補充
>>:右移運算符,移位后以原符號位補充,也就是負數以1補充,正數以0補充
>>>:無符號右移運算符,移位后總是以0補充
進行移位運算遵循的規則
1)對於低於int類型(byte,char,short)的操作數,總是自動類型轉換為int類型后在移位
2)對於int類型的整數移位a>>b,當b>32時,系統先將b對32求余(int類型數值32位),
得到的結果才是移動的位數,例如a>>33與a>1結果完全一致
3)對於long類型的整數移位a>>b,當b>>64時,也是移(b%64)位
4)對於<<和>>移位,把操作數左移n位,其結果等於操作數乘以2的n次方,
右移n位的結果等於操作數除以2的n次方,移位不會改變操作數本身
public static void main(String[] args) { System.out.println("5&9="+(5&9)); System.out.println("5|9="+(5|9)); System.out.println("~-5="+(~-5)); System.out.println("5^9="+(5^9)); System.out.println(5<<2); System.out.println(-5<<2); System.out.println(-5>>2); System.out.println(-5>>>3); int a=6; int b=a>>3; System.out.println(a+"右移3位后是"+b+",原操作數是"+a+",其本身並沒有變"); }
輸出:
5&9=1
5|9=13
~-5=4
5^9=12
20
-20
-2
536870911
6右移3位后是0,原操作數是6,其本身並沒有變
6.三目運算符
三目運算符只有一個?:,語法格式如下:(expression)?if-true stament : if-false stament
int c=11; int d=12; System.out.println(c>d?"c大於d":(c == d?"c等於d":"c小於d"));
輸出:c小於d
7.擴展后的賦值運算符
賦值運算符可以跟算數運算符,移位運算符結合,擴展成為更強大的運算符。只要能使用這些擴展后的運算符,通常都推薦使用它們,不僅有更好的性能,而且程序更加健壯
+=:對於x+=y,相當於x=x+y;
-=:對於x-=y,相當於x=x-y;
*=:對於x*=y,相當於x=x*y;
/=:對於x/=y,相當於x=x/y;
%=:對於x%=y,相當於x=x%y;
&=:對於x&=y,相當於x=x&y;
|=:對於x|=y,相當於x=x|y;
^=:對於x^=y,相當於x=x^y;
<<=:對於x<<=y,相當於x=x<<y;
>>=:對於x>>=y,相當於x=x>>y;
^=:對於x^=y,相當於x=x^y;
>>>=:對於x>>>=y,相當於x=x>>>y;
8.運算符優先級