1.算術運算符:+ - * / %
負號參加運算時,只參考被除數,被模數。
連接符:+ 運算順序從左打右
System.out.print(3 + “2”); // 32
任何數和字符串”相加”都是相連接。
自增/自減符:++ - -
b = a++ : 先把a的值預存到內存,a++自增後a的值加1,然後用預存的值去參與其他運算。
b = ++a:先運算++,然後把自增後的a賦值給b。
面試題:
int i = 3;
i = i++;
System.out.println(i); // i = 3
內存執行過程:
temp = i;
i = i + 1;
i = temp;
2.賦值運算符:= += -= *= /= %=
a /= 2: a = a/2
面試題:
short s= 3; // 正常,一次運算。
s += 4; //正常,也是賦值運算,一次運算,進行檢查判斷int型s+4是否在short範圍內,如果在,進行自動轉換。(不用做強轉)
s = s + 4; //出錯,兩次運算,s不確定的值,編譯無法進行檢查判斷s+4是否超出short範圍,報錯精度丟失。(或者右邊的s+4爲int型4個字節,賦值給short型2個字節需要強轉)
3.比較運算符:== != < > <= >= instanceof (檢查是否是類的對象,‘Hello’instanceof String)
運算完肯定有結果,結果爲true/false。
邏輯運算符:用於連接兩個boolean類型的表達式
& 與 有false爲false,左右都參與運算
| 或 有true爲true,左右都參與運算
^ 異或 兩邊結果一樣爲false
! 非 結果相反
面試題:
&& 雙與 如果左邊爲假,右邊不判斷
|| 雙或 如果左邊爲真,右邊不判斷
4.位運算符:運算更高效
左移:<< *2^n 都用0補位
右移:>> /2^n 負數最高位用1補
無符號右移:>>> /2^n 都用0補位
&: 二進制位與運算,都爲1時,結果才爲1
|: 二進制或運算,都爲0時,結果才爲0
^: 二進制異或運算,操作數不一樣時,結果才爲1
練習:
1.2*8 : 2<<3
2.交換兩個數,不通過第三方變量:
a = a + b;
b = a - b;
a = a - b; //這種方式不要用,而過兩個整數的數值過大,會超出int範圍,會自動強制轉換,數據會變化。
面試的時候(閱讀性差):
a = a^b;
b = a^b; //異或兩次等於還原
a = a^b;
開發時,使用第三方變量的形式,因爲閱讀性強:
int c;
c= a;
a= b;
b =c;
5.三元運算符:(條件表達式)? 表達式1 :表達式2;
運算符肯定有結果。
例子:比較三個數較大的整數:
int o,p,q;
int temp = o > p? o : p ;
int max = temp > q ? temp : q ;