前言
Java提供了非常豐富的運算符來對變量進行計算。我們可以把這些運算符分爲下面幾類:
- 算術運算符
- 關係運算符
- 按位運算符
- 邏輯運算符
- 賦值運算符
- 雜項運算符
算術運算符
算術運算符用於數學表達式中,和代數中的用法一樣。
下面表格中列出了算數運算符計算的例子,其中假設變量A的值是10,變量B的值是20。
運算符 | 說明 | 舉例 |
---|---|---|
+ (加) | 將符號左右兩側的數值進行相加 | A + B = 30 |
- (減) | 左右進行相減 | A - B = -10 |
* (乘) | 乘法運算 | A * B = 200 |
/ (除) | 除法運算 | B / A = 2 |
% (模取) | 計算左右相除的餘數 | B % A = 0 |
++ (自加) | 將值加1 | B++ = 21 |
– (自減) | 將值減1 | B-- = 19 |
關係運算符
下面表格中列出了Java中的關係運算符,同樣假設變量A的值是10,變量B的值是20。
運算符 | 描述 | 舉例 |
---|---|---|
== (等於) | 判斷兩邊是否相等,如果相等返回true,否則返回false。 | (A == B) = false. |
!= (不等於) | 判斷兩邊是否不相等,如果相等返回false,否則返回true。 | (A != B) = true |
> (大於) | 判斷左邊是否大於右邊,如果是則返回true,否則返回false。 | (A > B) = false |
< (小於) | 判斷左邊是否小於右邊,如果是則返回true,否則返回false。 | (A < B) = true |
>= (大於等於) | 判斷左邊是否大於或等於右邊,如果是則返回true,否則返回false。 | (A >= B) = false |
<= (小於等於) | 判斷左邊是否小於或等於右邊,如果是則返回true,否則返回false。 | (A <= B) = true |
按位運算符
Java定義了多種按位運算符,可以用與integer,int,long,short,char和byte數據類型。
按位運算符用於二進制比特位(bit)與比特位之間的計算。假設a=60,b=13,換算成二進制以後,其表示如下:
a = 0011 1100
b = 0000 1101
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
下表中列出了具體的按位運算符說明與計算示例:
運算符 | 描述 | 舉例 |
---|---|---|
& (按位與) | 二進制與操作符,操作符兩邊都爲1是得到1,否則得到0 | (A & B) 得到12,也就是二進制0000 1100 |
| (按位或) | 二進制或操作符,操作符兩邊至少有一邊爲1時得到1,否則得到0 | (A | B) 得到61,也就是0011 1101 |
^ (按位異或) | 二進制異或操作符,操作符有且只有一邊爲1時得到1,否則得到0 | (A ^ B) 得到49,也就是0011 0001 |
~ (按位補碼) | 二進制補碼運算符是一元的,具有“翻轉”位的作用。 | (~A )得到-61也就是1100 0011,二進制補碼形式。 |
<< (左移) | 二進制左移運算符。 左操作數的值向左移動右操作數指定的位數。 | A << 2 得到240,也就是二進制1111 0000 |
>> (右移) | 二進制右移運算符。 左操作數的值向右移動右操作數指定的位數。 | A >> 2得到15,也就是1111 |
>>> (0填充右移) | 右移零填充運算符。 左操作數的值向右移動右操作數指定的位數,並且移位後的值用零填充。 | A >>>2得到15,也就是0000 1111 |
邏輯運算符
下表中詳細說明了邏輯運算符,其中假設A爲true(真),B爲false(假)。
運算符 | 描述 | 舉例 |
---|---|---|
&& (邏輯與) | 邏輯與操作符。當操作符兩邊都爲true時,表達式返回爲true,否則爲false。 | (A && B) 爲 false |
|| (邏輯或) | 邏輯或操作符。當操作符兩邊至少有一邊爲true時,表達式返回true,否則返回false。 | (A |
! (邏輯非) | 邏輯非操作符。用於將表達式結果反轉,例如表達式爲true時,使用“非”運算後結果爲false;當表達式爲false時,使用“非”運算後結果爲true。 | !(A && B) 爲 true |
賦值運算符
下表中詳細列舉了Java中的賦值運算符。
操作符 | 說明 |
---|---|
= | 簡單的等號賦值運算符。將等號右邊的值賦給左邊。 |
+= | 將運算符左右兩邊的值相加後得到的值,賦值給運算符左邊的變量 |
-= | 將運算符左右兩邊的值相減後得到的值,賦值給運算符左邊的變量 |
*= | 將運算符左右兩邊的值相乘後得到的值,賦值給運算符左邊的變量 |
/= | 將運算符左右兩邊的值相除後得到的值,賦值給運算符左邊的變量 |
%= | 將運算符左右兩邊的值取模後得到的值,賦值給運算符左邊的變量 |
<<= | 將運算符左邊的值左移右邊的數值對應的位數後,賦值給運算符左邊的變量 |
>>= | 將運算符左邊的數值右移右邊的數值對應的位數後,賦值給運算符左邊的變量 |
&= | 將運算符左邊的值與右邊的值進行按位與操作後,將得到的值賦給左邊的變量 |
^= | 將運算符左邊的值與右邊的值進行按位異或操作後,將得到的值賦給左邊的變量 |
|= | 將運算符左邊的值與右邊的值進行按位或操作後,將得到的值賦給左邊的變量 |
雜項運算符
除了上文中提及的運算符之外,Java還支持少量其它的運算符。
條件運算符(? :)
條件運算符也叫三元運算符。這個運算符由三個操作數組成,用於評估布爾表達式。條件表達式用來決定哪個值該被賦給變量,寫法如下:
variable x = (expression) ? value if true : value if false
下面是一個應用的例子:
public class Test {
public static void main(String args[]) {
int a, b;
a = 10;
b = (a == 1) ? 20: 30;
System.out.println( "Value of b is : " + b );
b = (a == 10) ? 20: 30;
System.out.println( "Value of b is : " + b );
}
}
instanceof操作符
這個操作符僅用於對象的引用變量,用來檢查對象是否是一種特定的類型(類的類型或接口類型)。instanceof的用法如下:
( Object reference variable ) instanceof (class/interface type)
如果左側的變量是右側的類/接口的變量引用,那麼表達式就返回true。下面是一個使用的示例:
public class Test {
public static void main(String args[]) {
String name = "James";
boolean result = name instanceof String;
System.out.println( result );
}
}
程序運行結果輸出如下:
true
如果要比較的對象是與右側類型兼容,則此運算符表達式仍將返回true。下面是另外一個例子:
class Vehicle {}
public class Car extends Vehicle {
public static void main(String args[]) {
Vehicle a = new Car();
boolean result = a instanceof Car;
System.out.println( result );
}
}
程序運行結果輸出如下:
true
Java運算符的優先級
運算符優先級確定一個表達式中運算的分組和順序,這將影響表達式的計算結果。部分運算符優先級高於其它運算符,例如,乘法運算符的優先級高於加法運算符。
舉個例子,x = 7 + 3 * 2。在這個表達式中,x的計算結果爲13而不是20,這是因爲乘法運算符(*)比加法運算符(+)的優先級更高,所以首先計算3 * 2,然後再將這個計算結果與7相加。
下表中,運算符的優先級爲從上到下依次遞減,也就是第一行的運算符優先級最高,最後一行的運算符優先級最低。在同一個表達式中,運算符的優先級越高,就越先被計算。
類別 | 運算符 | 關聯性 |
---|---|---|
後綴 | expression++ expression– | 從左到右 |
一元 | ++expression –-expression +expression –expression ~ ! | 從右到左 |
乘性 | * / % | 從左到右 |
累加 | + - | 從左到右 |
移位 | << >> >>> | 從左到右 |
關係型 | < > <= >= instanceof | 從左到右 |
相等 | == != | 從左到右 |
按位與 | & | 從左到右 |
按位異或 | ^ | 從左到右 |
按位或 | | | 從左到右 |
邏輯與 | && | 從左到右 |
邏輯或 | || | 從左到右 |
條件運算符 | ?: | 從右到左 |
賦值運算符 | = += -= *= /= %= ^= |= <<= >>= >>>= | 從右到左 |
本篇小結
更多交流,歡迎加羣(584017112):