Java運算符
Java運算符主要包括以下幾種:
- 算術運算符
- 賦值運算符
- 關係運算符
- 邏輯運算符(邏輯運算符針對的是 boolean類型的表達式/值)
- 按位運算符(按位運算符針對的是 二進制的數字)
- 三元運算符
幾乎所有的操作符都只能操作“基本類型”,例外的操作符是“=” “==” “!=”,他們能操作所有的對象。除此之外,String類支持“+”和“+=”,當String後面緊跟一個“+”,而這個“+”後面又緊跟一個非String類型的元素,編譯器就會嘗試將這個非String轉化爲String
1.算術運算符
算術運算符 包括但不限於 +、-、*、/、%、++、--
,分別代表 加 減 乘 除 取餘 加加 減減
其中 前置加加 與 後置加加 的區別 由下面的例子解釋
2.賦值運算符
賦值運算符 包括 =、 +=、 -=、 *=、 /=、 %=
‘=’:賦值操作符意思是將右值賦值給左值,右值可以是任何場數、變量、或者表達式;但是左值必須是一個明確的、已命名的變量。常數不能作爲左值。
對基本類型的複製時很簡單的,基本數據類型存儲了實際的數值,而並非指向一個對象的引用,所以在爲其賦值的時候,是直接將一個地方的內容複製到了另一個地方。例如,對基本數據類型使用a=b,那麼b的內容就複製給a,若接着又修改了a,而b根據不會受這種修改的影響。
對一個對象進行操作時,我們真正操作的是對對象的引用。所以倘若“將一個對象賦值給另一個對象”,實際是將“引用”從一個地方複製到另一個地方
3.關係運算符
關係運算符 包括>、 <、 >=、 <=、 ==、 !=
,分別代表大於、小於、大於等於、小於等於、等於、不等於
,其中 關係運算符 有個特殊的 instanceof
是用來 比較一個對象是否屬於這個類
關於==與equals的區別?
- ‘==’ ‘!=’
可以用於基本數據類型,也可以用於引用數據類型的操作符
對於基本數據類型,比較的是數值
對於引用數據類型,比較的是對象的引用(地址)- equals
如果是相比較兩個對象的實際內容是否相同,又該如何操作呢?此時,必須使用所有對象都適用的特殊方法equals(),但這個方法不適用“基本類型”
注意:equals()的默認行爲是比較引用,所以如果你創建了自己的類,就需要進行方法重寫,以達到目的。
大多數Java類庫都實行了equals()方法,一遍用來比較對象的內容,而非比較對象的引用。
4.邏輯運算符
符號 | 名稱 | 解釋 | |
---|---|---|---|
二元運算符 | & | 邏輯與 | 兩個中有一個爲false,整體就爲false;全爲 true,整體才爲 true |
二元運算符 | | |
邏輯或 | 兩個中有一個爲true,整體就爲 true;全爲 false,整體才爲 false |
二元運算符 | ^ | 邏輯異或 | 兩個相同整體爲false,不同爲true |
一元運算符 |
! | 邏輯非 | 非false爲true,非true爲false |
二元運算符 | && | 短路與 | 與 & 作用相同,但具有短路作用,即如果左邊爲false,後面的表達式就不用考慮了;而 & 是無論左邊是false/true,後面的表達式都會執行 |
二元運算符 | || |
短路或 | 與 | 作用相同,但具有短路作用,即如果左邊爲true,後面的表達式就不用考慮了;而 | 是無論左邊是false/true,後面的表達式都會執行 |
5.按位運算符
位運算符針對的是二進制數字,而計算機存儲數字的時候是按照反碼存儲的,所以最高位保存的是符號位
符號 | 名稱 | 解釋 | |
---|---|---|---|
二元運算符 | & | 按位與 | 兩個二進制數字之間 若有一個爲0,則爲0 |
二元運算符 | | |
按位或 | 兩個二進制數字之間 若有一個爲1,則爲1 |
二元運算符 | ^ | 按位異或 | 兩個二進制數字相同爲0,不同爲1 |
一元運算符 |
~ | 按位非(反碼) | 按位取反(高位包括在內 ) |
二元運算符 | << | 左移 | 格式:m<<n,意思是將數字m的二進制格式向左移n位,其中左邊n位(包括最高位)丟棄,右邊補齊n個0 ,相當於乘2的n次方 |
二元運算符 | >> | 右移 | 格式:m>>n,意思是將數字m的二進制格式向右移n位,其中右邊n位丟棄,左邊補齊,當最高位爲0,則左邊補0;當最高位爲1,則左邊補齊1;相當於除以2的n次方 |
二元運算符 | >>> | 無符號右移 | 格式:m>>n,意思是將數字m的二進制格式向右移n位,其中右邊n位丟棄,左邊補齊n個0 |
拓展:關於 按位異或
一個數據對另個數據按位異或兩次,該數本身不變,如下圖:
- 面試題:不需要第三方變量,實現兩個變量的交換
6.三元運算符
格式:(關係表達式) ? 表達式1 : 表達式2
解釋:當關系表達式爲 true 時,執行 表達式1,否則執行 表達式2
相當於:
if( 關係表達式 ) {
表達式1;
}else{
表達式2;
}