[toc] https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html # Operators ## Assignment Operator(賦值運算子) 最常見的運算子 把右邊的值assign到左邊的變數。 ```java int i = 1; i = i + 1; ``` 並且整個expression值是右邊的值。 ```java System.out.println(i = 2); // 2 int j = i = 3; System.out.println(i); // 3 System.out.println(j); // 3 ``` 對於類別來說, 會讓左邊的變數參考右邊的物件。 ```java Object o = new Object(); ``` ## Arithmetic Operators(算術運算子) ``` + 加法 (也可用於字串相加) - 減法 * 乘法 / 除法 % 取餘數 (remainder) ``` ## Unary Operators(一元運算子) ``` + 表示正值 (不寫也是正值) - 把一個expression"負", (我不知道怎麼解釋, 大概就是 * -1) ++ 數值+1 -- 數值-1 ! 反轉boolean ``` Example: ```java int i = +1; int j = 1; int k = -2; k = -k; i++; --j; boolean b = true; boolean c = !b; ``` --- **i++ 等同於 i+=1 , return the original value(回傳原始值)** **++i 等同於 i+=1 , return the updated value(回傳原始值+1)** ```java int i = 10, j=10; System.out.println(i++); // 10 System.out.println(++j); // 11 System.out.println(i); // 11 System.out.println(j); // 11 ``` ## Equality and Relational Operators(等於/比較運算子) ``` == (如果是比對物件 會比較是否為同一個instance) != > < >= <= ``` ## Conditional Operators (條件運算子) ``` && AND || OR ``` ```java boolean t = true; boolean f = false; boolean b1 = t && f; // false boolean b2 = t || f; // true ``` 在多個OR中, 如果其中一個成立, 後面的邏輯皆不會判斷 ```java= public class Main { public static void main(String[] args) { if(a() || b()) System.out.println("hello, world"); } public static boolean a() { System.out.println("a"); return true; } public static boolean b() { System.out.println("b"); // 不會執行 return true; } } ``` ## Bitwise and Bit Shift Operators(位元運算子) ``` & Bitwise AND | Bitwise OR ^ Bitwise XOR (exclusive OR) ~ Bitwise NOT << Bitwise Left Shift >> Bitwise Right Shift (會考慮正負號的bit) >>> Bitwise Right Shift ``` ## 優先級 如果同級, 會由左至右 可以用`(...)`強制順序。 因此, 不要太依賴優先級, 使用括號明顯的寫出先後順序是個good practice. ```java x + y / 100 // 不建議 x + (y / 100) // 建議 ``` ### 優先級列表 - Unary Operators `++` `--` `+` `-` `!` - Type Casting - 乘 除 mod `*` `/` `%` - 加減法 `+` `-` - Relational Operators `<` `>` `<=` `>=` - Equality Operators `==` `!=` - AND `&&` - OR `||` - Assignment Operators `=` `*=` `/=` `%=` `+=` `-=`