-
Java 運算子(operator)根據功能分類:
- 算術運算子:+,-,*,/,%,++,--
- 賦值運算子:=
- 關系運算子:>,<,>=,<=,==,!=,instanceof
- 邏輯運算子:&&,||,!
- 位運算子:&,|,^,~,>>,<<,>>>
- 條件運算子:? :
- 擴展賦值運算子:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
-
運算子根據操作資料的個數分類:
- 一元運算子:++,--,!,~
- 二元運算子:+,-,*,/,%,=,>,<,>=,<=,==,!=,instanceof,&&,||,&,|,,>>,<<,>>>,+=,-=,*=,/=,%=,<<=,>>=,&=,=,|=
- 三元運算子:? :
-
Java的Math類 提供了很多科學和工程計算需要的方法和常數,特殊的運算都需要運用到方法!
一、算術運算子
Ⅰ、四則運算
- 四則運算子都是二元運算子,語法如下:
- 加法:var + var
- 減法:var - var
- 乘法:var * var
- 除法:var / var
注意:
- 進行運算時,參與運算的兩個資料中,型別轉換等級最高的資料型別,就是運算結果的資料型別,
- 整數運算時,若參與運算的兩個資料是byte或short型別,運算的結果是int型別,
- 字串連接符:'+'運算子兩側的運算元中只要有一個是字串(String)型別,系統會自動將另一個運算元轉換為字串然后再進行連接,
示例:
System.out.println(2 + 1);//3
System.out.println(2 - 1);//1
System.out.println(2 * 1);//2
System.out.println(2 / 1);//2
System.out.println(2 + (double)1);//3.0
Ⅱ、取模運算
-
取模運算是二元運算子,語法:var % var
-
其運算元可以為浮點數,一般使用整數,
-
取模運算與取余運算類似,運算結果是前一個數值被后一個數值整除后多余的值,區別在于對負整數進行除法運算時操作不同,取模運算的方式是:
- 負數 % 負數 = 負數
- 負數 % 正數 = 負數
- 正數 % 負數 = 正數
- 正數 % 正數 = 正數
示例:
System.out.println(-3 % -2);//-1
System.out.println(-3 % 2);//-1
System.out.println(3 % -2);//1
System.out.println(3 % 2);//1
Ⅲ、自增自減
- 自增(++)自減(--)運算子是一元運算子,
- 分為前綴自增自減法 和后綴自增自減法 兩種:前綴先進行自增或者自減運算,再進行運算式運算;后綴先進行運算式運算,再進行自增或者自減運算,
- 其運算元可以為浮點數,一般使用整數,
語法:
- 前綴自增:++var
- 前綴自減:--var
- 后綴自增:var++
- 后綴自減:var--
示例:
int num = 1;
System.out.println(num++);//1
System.out.println(num);//2
System.out.println(num--);//2
System.out.println(num);//1
System.out.println(++num);//2
System.out.println(num);//2
System.out.println(--num);//1
System.out.println(num);//1
二、賦值運算子
- '=',簡單的賦值運算子,將右運算元的值賦給左側運算元,
語法:var = value
三、關系運算子
- 關系運算子用于對兩個運算元進行比較,回傳結果位為布林值,
- 該運算子用于操作物件實體,檢查該物件是否是一個特定型別(型別別或介面型別),
語法:
- 是否相等:var == var
- 是否不等:var != var
- 是否大于:var > var
- 是否小于:var < var
- 是否大于或等于:var >= var
- 是否小于或等于:var <= var
- instanceof運算子:object instanceof type
示例:
System.out.println(1 == 2);//false
System.out.println(1 != 2);//true
System.out.println(1 > 2);//false
System.out.println(1 < 2);//true
System.out.println(1 >= 2);//false
System.out.println(1 <= 2);//true
System.out.println("" instanceof String);//true
四、邏輯運算子
- 邏輯運算子用于對布爾型別的資料進行運算,運算結果也為布爾型別,
- 邏輯與運算子(&&)和邏輯或運算子(||)為二元運算子,邏輯非運算子(!)為一元運算子,
- 邏輯與運算子,當且僅當兩個運算元都為 true,結果才為 true,
- 邏輯或運算子,如果任何兩個運算元任何一個為 true,結果為 true,
- 邏輯非運算子,用來反轉運算元的邏輯狀態,如果運算元為true,則邏輯非運算子將得到false,
語法:
- 邏輯與運算子:booleanVar && booleanVar
- 邏輯或運算子:booleanVar || booleanVar
- 邏輯非運算子:!booleanVar
注意:
- 邏輯與運算和邏輯或運算采用短路 的方式:
- 邏輯與(&)運算時,若第一個運算元為false,則跳過第二個運算元的布林值判斷,直接回傳結果為false,
- 邏輯或(||)運算時,若第一個運算元為true,則跳過第二個運算元的布林值判斷,直接回傳結果為true,
示例:
System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && false);//false
System.out.println(true || true);//true
System.out.println(true || false);//true
System.out.println(false || false);//false
int num = 1;
System.out.println(false && (num++ > 0));//false
System.out.println(num);//1
System.out.println(true || (num++ > 0));//true
System.out.println(num);//1
五、位運算子
- 位運算子應用于整數型別(int),長整型(long),短整型(short),字符型(char),和位元組型(byte)等型別,
- 位運算子作用在所有的位上,并且按位運算,
- '~'是一元運算子,其余都是二元運算子,
- 位操作是程式設計中對位模式按位或二進制數的一元和二元操作,在許多古老的微處理器上,位運算比加減運算略快,通常位運算比乘除法運算要快很多,在現代架構中,情況并非如此:位運算的運算速度通常與加法運算相同(仍然快于乘法運算),
作用:
- 與(&):如果相對應位都是1,則結果為1,否則為0,
- 或(|):如果相對應位都是 0,則結果為 0,否則為 1,
- 異或(^):如果相對應位值相同,則結果為0,否則為1,
- 非(~):按位取反運算子翻轉運算元的每一位,即0變成1,1變成0,
- 左移(<<):按位左移運算子,左運算元按位左移右運算元指定的位數,
- 右移(>>):按位右移運算子,左運算元按位右移右運算元指定的位數,
- 無符號右移(>>>):按位右移補零運算子,左運算元的值按右運算元指定的位數右移,移動得到的空位以零填充,
語法:
- 與(&):var & var
- 或(|):var | var
- 異或(^):var ^ var
- 非(~):~var
- 左移(<<):var << integer
- 右移(>>):var >> integer
- 無符號右移(>>>):var >>> integer
示例:
int num60 = 0B0011_1100;
int num13 = 0B0000_1101;
System.out.println(num60 & num13);//12:0000 1100
System.out.println(num60 | num13);//61:0011 1101
System.out.println(num60 ^ num13);//49:0011 0001
System.out.println(~num60);//-61:1100 0011
System.out.println(num60 << 2);//240:1111 0000
System.out.println(num60 >> 2);//15:1111
System.out.println(num60 >>> 2);//15:0000 1111
六、條件運算子
- 三元條件運算子,有三個運算元,并且需要判斷布爾運算式的值,
- 該運算子的主要是決定哪個值應該作為結果賦值給變數,
語法:type var = expression ? valueIfTrue : valueIfFalse
示例:
int number = 1;
int numResult = number > 0 ? 10 : 20;
System.out.println(numResult);//10
numResult = number < 0 ? 10 : 20;
System.out.println(numResult);//20
七、擴展賦值運算子
- 用于簡化代碼的賦值運算子,
- 當普通二元運算子的運算結果會賦值給左運算元的時候,可以用擴展賦值運算子進行簡化,
作用:
- 加和賦值運算子(+=):把左運算元和右運算元相加賦值給左運算元,等價于:varLeft = varLeft + varRight
- 減和賦值運算子(-=):把左運算元和右運算元相減賦值給左運算元,等價于:varLeft = varLeft - varRight
- 乘和賦值運算子(*=):把左運算元和右運算元相乘賦值給左運算元,等價于:varLeft = varLeft * varRight
- 除和賦值運算子(/=):把左運算元和右運算元相除賦值給左運算元,等價于:varLeft = varLeft / varRight
- 取模和賦值運算子(%=):把左運算元和右運算元取模后賦值給左運算元,等價于:varLeft = varLeft % varRight
- 左移位賦值運算子(<<=):把左運算元左移位右運算元的值后賦值給左運算元,等價于:varLeft = varLeft << varRight
- 右移位賦值運算子(>>=):把左運算元右移位右運算元的值后賦值給左運算元,等價于:varLeft = varLeft >> varRight
- 按位與賦值運算子(&=):把左運算元和右運算元按位與后賦值給左運算元,等價于:varLeft = varLeft & varRight
- 按位異或賦值運算子(^=):把左運算元和右運算元按位異或后賦值給左運算元,等價于:varLeft = varLeft ^ varRight
- 按位或賦值運算子(|=):把左運算元和右運算元按位或后賦值給左運算元,等價于:varLeft = varLeft | varRight
語法:
- 加和賦值運算子(+=):varLeft += varRight
- 減和賦值運算子(-=):varLeft -= varRight
- 乘和賦值運算子(*=):varLeft *= varRight
- 除和賦值運算子(/=):varLeft /= varRight
- 取模和賦值運算子(%=):varLeft %= varRight
- 左移位賦值運算子(<<=):varLeft <<= varRight
- 右移位賦值運算子(>>=):varLeft >>= varRight
- 按位與賦值運算子(&=):varLeft &= varRight
- 按位異或賦值運算子(^=):varLeft ^= varRight
- 按位或賦值運算子(|=):varLeft |= varRight
示例:
int numberLeft = 1;
int numberRight = 2;
System.out.println(numberLeft += numberRight);//3
System.out.println(numberLeft -= numberRight);//1
System.out.println(numberLeft *= numberRight);//2
System.out.println(numberLeft /= numberRight);//1
System.out.println(numberLeft %= numberRight);//1
System.out.println(numberLeft <<= numberRight);//4
System.out.println(numberLeft >>= numberRight);//1
System.out.println(numberLeft &= numberRight);//0
System.out.println(numberLeft ^= numberRight);//2
System.out.println(numberLeft |= numberRight);//2
八、運算子優先級
- 當多個運算子出現在一個運算式中,誰先誰后,就涉及到運算子的優先級別的問題,
- 在實際使用時,可以多使用小括號 區分一長串運算式里的運算子優先級,提高代碼的可讀性,
串列(越往下優先級越低):
| 類別 | 運算子 | 關聯性 |
|---|---|---|
| 后綴 | () [] .(點運算子) | 從左到右 |
| 一元 | expr++ expr-- | 從左到右 |
| 一元 | ++expr --expr + - ~ ! | 從右到左 |
| 乘性 | * / % | 從左到右 |
| 加性 | + - | 從左到右 |
| 移位 | >> >>> << | 從左到右 |
| 關系 | > >= < <= | 從左到右 |
| 相等 | == != | 從左到右 |
| 按位與 | & | 從左到右 |
| 按位異或 | ^ | 從左到右 |
| 按位或 | | | 從左到右 |
| 邏輯與 | && | 從左到右 |
| 邏輯或 | || | 從左到右 |
| 條件 | ?: | 從右到左 |
| 賦值 | = += -= *= /= %= >>= <<= &= ^= |= | 從右到左 |
| 逗號 | , | 從左到右 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/187613.html
標籤:Java
