Java中常見的運算子
Java 語言支持如下運算子:
算術運算子: +,-,*,/,%,++,–
字串連接運算子:+
關系(比較)運算子: >,<,>=,<=,==,!=
邏輯運算子: !,& , | , &&,||
賦值運算子: = ,+ =,- =,* =,/ =
條件運算子:(boolean達式)?(運算式1):(運算式2)
位運算子:<< , >> , >>>, & , | , ^ , ~
算數運算子
| 運算子 | 運算 | 范例 | 結果 |
|---|---|---|---|
| + | 正號 | +3 | 3 |
| - | 負號 | b=4; -b | -4 |
| + | 加 | 5+5 | 10 |
| - | 減 | 6-4 | 2 |
| ***** | 乘 | 3*4 | 12 |
| / | 除 | 5/5 | 1 |
| % | 取模 | 7%5 | 2 |
| ++ | 自增(前):先運算后取值 自增(后):先取值后運算 | a=2;b=++a;a=2;b=a++; | a=3;b=3a=3;b=2 |
| - - | 自減(前):先運算后取值 自減(后):先取值后運算 | a=2;b=- -a;a=2;b=a- -; | a=1;b=1a=1;b=2 |
練習:
public static void main(String[] args){
int i1 = 10,i2 = 20;
int i = i1++;
System.out.print("i="+i);//10
System.out.println("i1="+i1);//11
i = ++i1;
System.out.print("i="+i);//12
System.out.println("i1="+i1);//12
i = i2--;
System.out.print("i="+i);//20
System.out.println("i2="+i2);//19
i = --i2;
System.out.print("i="+i);//18
System.out.println("i2="+i2);//18
}
比較運算子
| 運算子 | 運算 范例 結果 |
|---|---|
| == | 相等于 4==3 false |
| != | 不等于 4!=3 true |
| < | 小于 4<3 false |
| > | 大于 4>3 true |
| <= | 小于等于 4<=3 false |
| >= | 大于等于 4>=3 true |
| instanceof | 檢查是否是類的物件 “Hello” instanceof String true |
比較運算子的結果都是boolean型,也就是要么是true,要么是false,
注意:比較運算子“==”不能誤寫成“=” ,
邏輯運算子
邏輯運算子:
&—邏輯與 | —邏輯或 !—邏輯非
&& —短路與 || —短路或 ^ —邏輯異或
| a | b | a&b | a|b | !a | a^b | a&&b | a||b |
|---|---|---|---|---|---|---|---|
| true | true | true | true | false | false | true | true |
| true | false | false | true | false | true | false | true |
| false | true | false | true | true | true | false | true |
| false | false | false | false | true | false | false | false |
“&”和“&&”的區別:
單&時,左邊無論真偽,右邊都進行運算;
雙&時,如果左邊為真,右邊參與運算,如果左邊為假,那么右邊不參與運算,
“|”和“||”的區別同理,||表示:當左邊為真,右邊不參與運算,
異或( ^ ):當左右都為true時,結果為false,
理解:異或,追求的是“異”!
賦值運算子
符號:=
當“=”兩側資料型別不一致時,可以使用自動型別轉換或使用強制型別轉換原則進行處理,支持連續賦值,
擴展賦值運算子: +=, -=, *=, /=, %=
思考1:
short s = 3; // 3是int 但是虛擬機支持將int型別3賦給short,byte
s=s+2; //①s是short +2(int) 結果為int
s+=2; //②s=s+2
//①和②有什么區別?
| 運算子 | 用法舉例 | 等效的運算式 |
|---|---|---|
| += | 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 |
思考2:
boolean b1 = false;//區分好==和=的區別,
if(b1=true){
System.out.println("結果為真");
}else{
System.out.println("結果為假");
}
思考3:
int i = 1;
i *= 0.1; i=i*0.1 = 0
System.out.println(i);//0
i++;
System.out.println(i);//1
條件運算子
語法: (條件運算式)? 運算式1:運算式2;
為true,運算后的結果是運算式1;
為false,運算后的結果是運算式2;
運算式1和運算式2為同種型別
條件運算子與if-else的聯系與區別:
1)條件運算子可簡化if-else陳述句
2)條件運算子要求必須回傳一個結果,
3)if后的代碼塊可有多個陳述句
位運算
日常開發中位運算不是很常用,但是巧妙的使用位運算可以大量減少運行開銷,優化演算法.
| 位運算子 | 用法 |
|---|---|
| << | 空位補0,被移除的高位丟棄,空缺位補0, |
| >> | 被移位的二進制最高位是0,右移后,空缺位補0;最高位是1,空缺位補1, |
| >>> | 被移位二進制最高位無論是0或者是1,空缺位都用0補, |
| & | 二進制位進行&運算,只有1&1時結果是1,否則是0 |
| | | 二進制位進行 | 運算,只有0 | 0時結果是0,否則是1 |
| ^ | 相同二進制位進行 ^ 運算,結果是0;1^1=0 , 0^0=0 不相同二進制位 ^ 運算結果是1,1^0=1 , 0^1=1 |
| ~ | 正數取反,各二進制碼按補碼各位取反 負數取反,各二進制碼按補碼各位取反 |
運算子優先級
運算式的運算順序
1 |
| ~ | 正數取反,各二進制碼按補碼各位取反 負數取反,各二進制碼按補碼各位取反 |
運算子優先級
運算式的運算順序

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/177359.html
標籤:其他
