本篇文章爲本人學習筆記,如有錯誤,希望指正。
Java中運算符大致分爲以下幾類:
- 算數運算符
- 賦值運算符
- 自增自減運算符
- 關係運算符
- 邏輯運算符
- 三元運算符
1. 算數運算符
算數運算符包括: | 作用 |
---|---|
+ |
加法運算,字符串連接運算 |
- |
減法運算 |
* |
乘法運算 |
/ |
除法運算 |
% |
取模運算,兩個數字相除取餘數 |
-
注意:/和%的區別:兩個數據做除法,/取結果的商,%取結果的餘數。
整數操作只能得到整數,要想得到小數,必須有浮點數參與運算。
1.1 字符串的 + 操作
-
當“+”操作中出現字符串時,這個”+”是字符串連接符,而不是算術運算。
System.out.println("Aunero" + 123); //輸出結果爲Aunero123
-
在”+”操作中,如果出現了字符串,就是連接運算符,否則就是算術運算。當連續進行“+”操作時,從左到右逐個執行。
System.out.println(1 + 99 + "Aunero"); //前兩個都是整型常量,會先相加,相加後再和字符串結合,輸出結果爲100Aunero
-
在沒有字符串參與時,會直接相加
System.out.println(1 + 'a'); //此時單個字符a會取到ASCII碼值,輸出結果爲98
2. 賦值運算符
符號 | 作用 | 說明 |
---|---|---|
= |
賦值 | a=10,將10賦值給變量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 |
2.1 底層細節-強轉
short s = 1;
s += 1; // 相當於 s = (short)(s + 1);
//我們知道,s = s + 1 在此處是會報錯的,因爲s爲short型,整型常量默認int型,這時候必須強轉才能保證s的類型不變。
System.out.println(s);//沒有報錯,結果是2
//建議:寫+=的時候,數據不要超出變量的取值範圍,否則數字會錯誤。
這裏其實就是隱式轉換的知識,詳細可以參照:https://www.jianshu.com/p/a1c0a8a0a054(四-1)
後面幾個運算符以此類推。
3. 自增自減運算符
符號 | 作用 | 說明 |
---|---|---|
++ | 自增 | 變量的值加1 |
– | 自減 | 變量的值減1 |
- ++和-- 既可以放在變量的後邊,也可以放在變量的前邊
3.1 單獨使用
- 單獨使用的時候, ++和-- 無論是放在變量的前邊還是後邊,結果是一樣的。
3.2 參數操作的使用
- 如果放在變量的後邊,先將該變量原本的值,取出來參與操作,隨後再進行自增(++),自減(–)。
int a = 10;
int b = a++;
// a = 11
// b = 10
- 如果放在變量的前邊,先對該變量做自增(++)或者自減(–),然後再拿變量參與操作。
int a = 10;
int b = ++a;
// a = 11;
// b = 11;
這裏的計算邏輯和C語言一樣。
- 分享一道比較容易混淆的面試題。
int x = 10;
int y = x++ + x++ + x++;
System.out.println(x); //輸出結果爲13
System.out.println(y); //輸出結果爲33
分析:
這裏給y賦值時,x經歷了兩次自增,即:y = 10 + 11 + 12,y的結果爲33。
第三次自增在賦值結束後進行,即:x = 12 + 1。
所以結果爲13, 33。
4. 關係運算符 (比較運算符)
符號 | 說明 |
---|---|
== | a==b,判斷a和b的值是否相等,成立爲true,不成立爲false |
!= | a!=b,判斷a和b的值是否不相等,成立爲true,不成立爲false |
> | a>b,判斷a是否大於b,成立爲true,不成立爲false |
>= | a>=b,判斷a是否大於等於b,成立爲true,不成立爲false |
< | a<b,判斷a是否小於b,成立爲true,不成立爲false |
<= | a<=b,判斷a是否小於等於b,成立爲true,不成立爲false |
- 總結:比較運算符無論簡單還是複雜,結果都是 boolean 類型的 true 、false;
5. 邏輯運算符
符號 | 作用 | 說明 |
---|---|---|
& | 邏輯與 | a&b,a和b都是true,結果爲true,否則爲false |
| | 邏輯或 | a|b,a和b都是false,結果爲false,否則爲true |
^ | 邏輯異或 | a^b,a和b結果不同爲true,相同爲false |
! | 邏輯非 | !a,結果和a的結果正好相反 |
&& | 短路與 | 作用和&相同,但是有短路效果 |
|| | 短路或 | 作用和|相同,但是有短路效果 |
- 短路效果:
-
邏輯與**&**,無論左邊真假,右邊都要執行。
-
短路與**&&,如果左邊爲真,右邊執行;如果左邊爲假,右邊不執行**。
-
邏輯或**|**,無論左邊真假,右邊都要執行。
-
短路或**||,如果左邊爲假,右邊執行;如果左邊爲真,右邊不執行**
-
做個簡單總結:
&& 和 || 比較 “懶” ,只要左邊能直接判斷出邏輯結果,右邊則直接不運算。
- 注意
! && || 這三個邏輯運算符比較常用
優先級從高到低依次爲非、與、或 。
6. 三元運算符
-
三元運算符語法格式:
比較表達式 ? 表達式1 : 表達式2;
-
計算規則:
首先計算比較表達式的值
如果值爲true,表達式1的值就是運算結果
如果值爲false,表達式2的值就是運算結果