複習到了運算符這塊,整理一下筆記,以備後續參考。
運算符:運算符顧名思義是一種符号,它是連接配接一個以上的操作符,實作某種功能的運算。
目錄
一、算數運算符
二、位運算符
三、邏輯運算符
四、關系運算符
五、運算符優先級
根據需要點選目錄可直接跳轉。
一、算數運算符
算術運算符用在數學表達式中,主要實作的是算術運算,如常見的加減乘除等。
表格中的例子中,變量
a
的值為 5,變量
b
的值為 3,變量
i
的值為 1:
其中,自增 (++) 和自減 (--) 運算符有兩種寫法:字首(++i,--i)和字尾(i++,i--)。
- 字首自增自減法 (++i,--i): 先進行自增或者自減運算,再進行表達式運算。
- 字尾自增自減法 (i++,i--): 先進行表達式運算,再進行自增或者自減運算
建立一個源代碼檔案
ArithmeticOperation.java
:
public class ArithmeticOperation {
public static void main(String args[]) {
int a = 5;
int b = 3;
int c = 3;
int d = 3;
System.out.println("a + b = " + (a + b));
System.out.println("a - b = " + (a - b));
System.out.println("a * b = " + (a * b));
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));
System.out.println("a++ = " + (a++));
System.out.println("++a = " + (++a));
System.out.println("b-- = " + (b--));
System.out.println("--b = " + (--b));
System.out.println("c++ = " + (c++));
System.out.println("++d = " + (++d));
}
}
編譯運作:
$ javac ArithmeticOperation.java
$ java ArithmeticOperation
a + b = 8
a - b = 2
a * b = 15
a / b = 1
a % b = 2
a++ = 5
++a = 7
b-- = 3
--b = 1
c++ = 3
++d = 4
二、位運算符
Java 定義了位運算符,應用于整數類型 (
int
),長整型 (
long
),短整型 (
short
),字元型 (
char
),和位元組型 (
byte
) 等類型。位運算時先轉換為二進制,再按位運算。
表格中的例子中,變量
a
的值為 60(二進制:
00111100
),變量
b
的值為 13(二進制:
00001101
):
建立一個源代碼檔案
BitOperation.java
:
public class BitOperation {
public static void main(String args[]) {
int a = 60;
int b = 13;
System.out.println("a & b = " + (a & b));
System.out.println("a | b = " + (a | b));
System.out.println("a ^ b = " + (a ^ b));
System.out.println("~a = " + (~a));
System.out.println("a << 2 = " + (a << 2));
System.out.println("a >> 2 = " + (a >> 2));
System.out.println("a >>> 2 = " + (a >>> 2));
}
}
編譯運作:
$ javac BitOperation.java
$ java BitOperation
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15
三、邏輯運算符
邏輯運算符是通過運算符将操作數或等式進行邏輯判斷的語句。
表格中的例子中,假設布爾變量
a
為真(
true
),變量
b
為假(
false
):
&&
與
||
是具有短路性質,當按優先級順序計算到目前表達式時,表達式的結果可以确定整個表達式的結果時,便不會繼續向後進行判斷和計算,而直接傳回結果。
例如:當使用
&&
邏輯運算符時,在兩個操作數都為
true
時,結果才為
true
,但是當得到第一個操作為
false
時,其結果就必定是
false
,這時候就不會再判斷第二個操作了。在計算表達式
(a & b) && (a | b)
時,首先計算
a & b
得到了
false
,因為之後是
&&
,任何值與
false
進行與操作都是
false
,是以可以不用再計算下去,而直接傳回
a & b
的結果
false
。
建立一個
LogicOperation.java:
public class LogicOperation {
public static void main(String args[]) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a && b));
System.out.println("a || b = " + (a || b));
System.out.println("!a = " + (!a));
System.out.println("a ^ b = " + (a ^ b));
}
}
編譯運作:
$ javac LogicOperation.java
$ java LogicOperation
a && b = false
a || b = true
!a = false
a ^ b = true
四、關系運算符
關系運算符生成的是一個
boolean
(布爾)結果,它們計算的是操作數的值之間的關系。如果關系是真實的,結果為
true
(真),否則,結果為
false
(假)。
表格中的例子中,假設變量
a
為 3,變量
b
為 5:
除了上表列出的二進制運算符,Java 還有唯一的一個三目運算符
?:
。
文法格式:
布爾表達式 ?表達式 1 : 表達式 2;
運算過程:如果布爾表達式的值為
true
,則傳回表達式 1的值,否則傳回表達式 2的值。
建立一個源代碼檔案
RelationalOperation.java
:
public class RelationalOperation {
public static void main(String args[]) {
int a = 3;
int b = 5;
System.out.println("a == b = " + (a == b));
System.out.println("a != b = " + (a != b));
System.out.println("a > b = " + (a > b));
System.out.println("a < b = " + (a < b));
System.out.println("a >= b = " + (a >= b));
System.out.println("a <= b = " + (a <= b));
System.out.println("a > b ? a : b = " + (a > b ? a : b));
}
}
編譯運作:
$ javac RelationalOperation.java
$ java RelationalOperation
a == b = false
a != b = true
a > b = false
a < b = true
a >= b = false
a <= b = true
a > b ? a : b = 5
強調:
-
和==
适用于所有的基本資料類型,其他關系運算符不适用于!=
,因為boolean
值隻有boolean
和true
,比較沒有任何意義。false
-
和==
也适用于所有對象,可以比較對象的引用是否相同。!=
引用:Java 中一切都是對象,但操作的辨別符實際是對象的一個引用。
五、運算符優先級
運算符的優先級是幫助我們在一個表達式中如何對于不同的運算符和相同的運算符,進行正确的運算順序。
運算符的優先級不需要特别地去記憶它,比較複雜的表達式一般使用圓括号
()
分開,提高可讀性。
參考資料:實驗樓學習文檔