Java運算子及優先順序(全)
運算子是一種特殊的符號,用以表示資料的運算、賦值和比較等。
Java運算子分為以下幾種:
• 算術運算子:+,-,*,/,%,++,--
• 賦值運算子:=
• 擴充套件後的賦值運算子:+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=,>>>=
• 位運算子:&,|,~,^,<<,>>,>>>
• 比較運算子:>,>=,<,<=,==
• 邏輯運算子:&&,&,||,|,!,^
• 三目運算子:? :
1、算術運算子
1)+:加法運算子
例如如下程式碼:
int a = 1;
int b = 2;
int sum = a+b;
System.out.println(sum); //sum的值為3
另外,+還可以作為字串的連線運算子。
2)-:減法運算子
例如如下程式碼:
int a = 3;
int b = 2;
int sub = a-b;
System.out.println(sub); //sub的值為1
3)*:乘法運算子
例如如下程式碼:
int a = 5;
int b = 6;
int multiply = a*b;
System.out.println(multiply ); //multiply 的值為30
4)/:除法運算子
例如如下程式碼:
int a = 10;
int b = 5;
int div = a/b;
System.out.println(div); //div的值為2
注:如果除法運算子的兩個運算元都是整數型別,則計算結果為整數,除數不可以為0,否則會引發異常;如果除法運算子的兩個運算元中至少一個是浮點數,則計算結果也是浮點數,此時除數可以為0或0.0,得到的結果是正無窮大或負無窮大。
5)%:求餘運算子(取模運算子)
例如如下程式碼:
int a = 10;
int b = 3;
int mod = a%b;
System.out.println(mod ); //mod 的值為1
注:求餘運算子的結果不一定總是整數。如果求餘運算子的兩個運算元都是整數,則第二個運算元不能為0(同除法運算規則);如果求餘運算子的兩個運算元中至少一個是浮點數,則第二個運算元可以是0或0.0,但求餘結果是是非數:NaN。
6)++:自加運算子
++自加運算子是單目運算子(一元運算子),只有一個運算元。運算子既可以放在運算元的左邊也可以放在運算元的右邊。如果把++放在左邊,則先把運算元加1,然後再運算;如果把++放在右邊,則先運算,然後再把運算元加1。
自加運算子放在運算元左邊的程式碼:
int a = 2;
int b = ++a + 3; //a先自加,然後再執行算術運算
System.out.println(a); //a的值為3
System.out.println(b); //b 的值為6
自加運算子放在運算元右邊的程式碼:
int a = 2;
int b = a++ + 3; //a先執行算術運算,再自加
System.out.println(a); //a的值為3
System.out.println(b); //b 的值為5
7)--:自減運算子
--自減運算子也是單目運算子(一元運算子),只有一個運算元。用法與++類似,只是將運算元的值減1;
注:自加和自減只能用於操作變數,不能用於運算元值直接量、常量或表示式。例如3--是錯誤的!
2. 賦值運算子
賦值運算子用於為變數指定變數值。
例如 String str = "java"; //為變數str賦值java
3. 擴充套件後的賦值運算子
+=:對於a+=b,即對應於a=a+b。
-=:對於a-=b,即對應於a=a-b。
*=:對於a*=b,即對應於a=a*b。
/=:對於a/=b,即對應於a=a/b。
%=:對於a%=b,即對應於a=a%b。
&=:對於a&=b,即對應於a=a&b。
|=:對於a|=b,即對應於a=a|b。
^=:對於a^=b,即對應於a=a^b。
<<=:對於a<<=b,即對應於a=a<<b。
>>=:對於a>>=b,即對應於a=a>>b。
>>>=:對於a>>>=b,即對應於a=a>>>b。
4. 位運算子
&:按位與。當兩位同時為1時才返回1。
|:按位或。只要有一位為1就返回1。
~:按位非。單目運算子,將運算元的每一位(包括符號位)全部取反。
^:按位異或。當兩位不同時返回1,相同時返回0。
<<:左移運算子
>>:右移運算子
>>>:無符號右移運算子
程式碼示例如下:
System.out.println(5&9); //輸出1
System.out.println(5|9); //輸出13
System.out.println(~-5); //輸出4
System.out.println(5^9); //輸出12
System.out.println(5<<2); //輸出20
System.out.println(-5<<2); //輸出-20
System.out.println(-5>>2); //輸出-2
System.out.println(-5>>>2); //輸出1073741822
5. 比較運算子
比較運算子用於判斷兩個常量或變數的大小,比較結果是是一個布林值(true或false)。
比較運算子有:>(大於),>=(大於等於),<(小於),<=(小於等於),==(等於)。
程式碼示例如下:
System.out.println(7>3); //輸出true
System.out.println(7<=3); //輸出false
6. 邏輯運算子
邏輯運算子用於操作兩個布林的變數或常量,有如下6個:
&&:與,兩個運算元都為true才返回true,否則返回false。
&:不短路與,作用與&&相同,但不會短路。
||:或,兩個運算元只要有一個為true,就返回true,兩個運算元都為false才返回false。
|:不短路或,作用與||相同,但不會短路。
!:非,或取反,如果運算元是true,則返回false。如果是false,則返回true。
^:異或,當兩個運算元不同時才返回true,相同返回false。
下面程式碼示範了邏輯運算子短路與不短路的區別(以|和||的區別為例):
int a = 3;
int b = 9;
if(a>2 | b++ >9){
System.out.println(b); //輸出10,說明b++ >9得到了計算
}
if(a>2 || b++ >9){
System.out.println(b); //輸出9,說明b++ >9沒有得到了計算
}
&與&&的區別與此類似。
7. 三目運算子
三目運算子:? :,語法格式如下:
(expression) ? if-true-statement : if-false-statement
三目運算子的語法規則是:先對邏輯表示式expression求值,如果expression返回true,則返回第二個運算元的值,否則返回第三個運算元的值。
程式例項如下:
String str = 7>4?"7大於4":"7不大於4";
System.out.println(str); //輸出7大於4
8. 運算子的優先順序
運算子說明 | Java運算子 |
分隔符 | . [] () {} , ; |
單目運算子 | ++ -- ~ ! |
強制型別轉換運算子 | (type) |
乘法、除法、求餘 | * / % |
加法、減法 | + - |
移位運算子 | << >> >>> |
關係運算符 | < <= > >= instanceof |
等價運算子 | == != |
按位與 | & |
按位異或 | ^ |
按位或 | | |
條件與 | && |
條件或 | || |
三目運算子 | ?: |
賦值 | = += -= *= /= &= |= ^= %= <<= >>= >>>= |
歡迎關注微信公眾號【Java典籍】,收看更多Java技術乾貨!關注即送java全套資料一份
▼微信掃一掃下圖↓↓↓二維碼關注
&n