運算子與優先級

文章目錄
- 運算子與優先級
- 一、運算子
- (1)數值運算子
- (2)賦值及結合賦值運算子
- (3)自增與自減運算子
- (4)關系運算子
- (5)布爾運算子
- (6)位運算子
- (7)三元運算子
- 二、運算子的優先級
- 三、型別轉換
一、運算子
(1)數值運算子
數值資料型別的運算子包括標準的算術運算子:加號(+)、減號(-)、乘號(*)、除號(/)和求余號(%),運算元是被運算子操作的值,
| 運算子 | 名字 | 示例 | 運算結果 |
|---|---|---|---|
| + | 加 | 34 + 1 | 35 |
| - | 減 | 34.0-0.1 | 33.9 |
| * | 乘 | 300 * 30 | 9000 |
| / | 除 | 1.0 / 2.0 | 0.5 |
| % | 求余 | 20 %3 | 2 |
- 當除法的運算元都是整數時,除法的結果就是整數,小數部分被舍去,
- 運算子
%, 被稱為求余或者取模運算子,可以求得除法的余數,左邊的運算元是被除數,運算子%通常用在正整數上,實際上,它也可用于負整數和浮點值,只有當被除數是負數時,余數才是負的, - 運算子
+和-可以是一元的也可以是二元的,一元運算子僅有一個運算元;而二元運算子有兩個運算元,
(2)賦值及結合賦值運算子
-
1.賦值運算子
在 Java 中,將等號(=)作為賦值運算子(assignment operator),- 賦值陳述句(assignment statement):( 變數=運算式;)
variable = expression; - 運算式(expression): 表示涉及值、變數和運算子的一個運算,它們組合在一起計算出一個新值
- 賦值陳述句常常稱作賦值運算式(assignment expression)
- 賦值陳述句(assignment statement):( 變數=運算式;)
-
2.結合賦值運算子
運算子+、-、*、/、%可以結合賦值運算子形成增強運算子,作符 名稱 示例 等價于 += 加法賦值運算子 i+=8 i =i+8 -= 減法賦值運算子 i-=8 i=i-8 *= 乘法賦值運算子 i*=8 i=i*8 /= 除法賦值運算子 i/=8 i=i/8 %= 求余賦值運算子 i% = 8 i = i %8 - 在增強運算子中是沒有空格的
- 運算子(+=、-=、*=、/=、%=) 可以構成賦值陳述句,也可以構成賦值運算式,
- 如果運算子得到一個值,其型別與左側運算元的型別不同,就會發生強制型別轉換
(3)自增與自減運算子
自增運算子(++) 和自減運算子(--) 是對變數進行加 1 和減 1 的操作,
| 運算子 | 名稱 | 說明 |
|---|---|---|
| ++var | 前綴自增運算子 | 變數 var 的值加1且使用 var 增加后的新值 |
| var++ | 后綴自增運算子 | 變置 var 的值加1但使用 var 原來的值 |
| –var | 前綴自減運算子 | 變數 var 的值減1且使用 var 減少后的新值 |
| var– | 后綴自減運算子 | 變置 var 的值減1但使用 var 原來的值 |
使用自增運算子和自減運算子可以使運算式更加簡短,但也會使它們比較復雜且難以讀懂,應該避免在同一個運算式中使用這些運算子修改多個變數或多次修改同一個變數,
(4)關系運算子
| Java運算子 | 數學符號 | 名稱 |
|---|---|---|
| < | < < < | 小于 |
| <= | ? \leqslant ? | 小于等于 |
| > | > > > | 大于 |
| <= | ? \geqslant ? | 大于等于 |
| == | = = = | 等于 |
| != | =? \not = ?= | 不等于 |
- 比較的結果是一個布林值:true ( 真)或 false (假) ,
- 相等的關系運算子是兩個等號(==) , 而不是一個等號(=),
(5)布爾運算子
邏輯運算子( logical operator ) 也稱為布爾運算子(boolean operator), 是對布林值進行的運算,創建新的布林值,
| 運算子 | 名稱 | 說明 |
|---|---|---|
| ! | 非 | 邏輯非 |
| && | 與 | 邏輯與 |
| || | 或 | 邏輯或 |
| ^ | 異或 | 邏輯異或 |
- 非運算子(||)對 true 取反是 false, 而 false 取反之后則是 true
- 與操作(&&),當且僅當兩個運算元都為 true 時,這兩個布爾型運算元的與(&&) 為 true
- 或運算子(||),當至少有一個運算元為true 時,兩個布爾型運算元的或(||)為 true
- 異或運算子(^ ),當且僅當兩個運算元具有不同的布林值時,兩個布爾型運算元的異或(^) 才為 true
&&和||被稱為短路或者懶惰運算子:
如果運算子&&的運算元之一為 false, 那么運算式就是 false;如果運算子||的運算元之一為 true, 那么運算式就是 true,
- 當計算 p1&&p2 時,Java 先計算 p1, 如果 p1 為 true 再計算 p2; 如果 p1 為 false, 則不再計算p2,
- 當計算 p1||p2時,Java 先計算 p1, 如果 p1為 false 再計算 p2;如果 p1為 true, 則不再計算 P2
(6)位運算子
用機器語言撰寫程式,經常要直接處理二進制數值,并在位級別上執行操作,Java 提供了位運算子和移位運算子:
| 位運算子 | 名稱 | 描述 |
|---|---|---|
| & | 按位與 | 兩個相應位上的位元如果都為1,則執行與搡作會得到 1 |
| | | 按位或 | 兩個相應位上的位元如果其中有一個為 1 , 則執行或操作會得到1 |
| ^ | 按位異或 | 兩個相應位上的位元如果相異,則執行與或操作會得到 1 |
| ~ | 按位求反 | 運算子將每個位元從 0 到 1 或者從 1 到 0進行轉換 |
| << | 左移位 | 運算子將其左邊的運算元按照第二個運算元指定的位移數進行左移位,右邊空出來的補 0 |
| >> | (帶符號)右移位 | 運算子將其第一個運算元按照第二個運算元指定的位移數進行右移位,最高位補上符號位 |
| >>> | (無符號)右移位 | 運算子將其第一個運算元按照第二個運算元指定的位移數進行右移位,左邊空出來的補 0 |
(7)三元運算子
condition ? expression1 : expresszon2
如果條件為 true,就為第一個運算式的值,否則計算為第二個運算式的值,
二、運算子的優先級
運算子按照優先級遞減的順序從上到下列出,同一欄中的運算子優先級相同,它們的結合方向如表中所示:

三、型別轉換
Java可以將一個數值賦給支持更大數值范圍型別的變數,例如,可以將 long 型的值賦給 float型變數,但是,如果不進行型別轉換,就不能將一個值賦給范圍較小型別的變數,型別轉換是一種將一種資料型別的值轉換成另一種資料型別的操作,將一個小范圍型別的變數轉換為大范圍型別的變數稱為拓寬型別( widening a type ), 把大范圍型別的變數轉換為小范圍型別的變數稱為縮窄型別( narrowing a type),Java 將自動拓寬一個型別,但縮窄型別必須顯式完成,
在下圖中有6個實心箭頭,表示無資訊丟失的轉換 ;3個虛箭頭,表示可能有精度損失的轉換,

強制型別轉換的語法格式是在圓括號中給出想要轉換的目標型別,后面緊跟待轉換的變數名:
(type) variable
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/274422.html
標籤:其他
上一篇:leetcode——旋轉陣列
