第三節:Java運算子
1. 算術運算子
運算子顧名思義是一種符號,它是連線一個以上的操作符,實現某種功能的運算。
我們就先來認識一下算術運算子吧!
算術運算子用在數學表示式中,主要實現的是算術運算,如我們常見的加法、減法、乘法、除法等。

其中,自增(++)和自減(--)運算子有兩種寫法:字首(++i,--i)和字尾(i++,i--)。
1.字首自增自減法(++i,--i): 先進行自增或者自減運算,再進行表示式運算。
2. 字尾自增自減法(i++,i--): 先進行表示式運算,再進行自增或者自減運算
下面來看下程式碼吧!

大家可以發現++在變數的左邊和右邊,賦值得到的結果是不一樣的,自減也是同樣的道理。
2. 位運算子
Java定義了位運算子,應用於整數型別(int),長整型(long),短整型(short),字元型(char),和位元組型(byte)等型別。位運算時 先轉換為二進位制,再按位運算。
表格中的例子中,變數a的值為60,變數b的值為13:

下面來看看程式碼吧:

3 .邏輯運算子
邏輯運算子是通過運算子將運算元或等式進行邏輯判斷的語句。
表格中的例子中,假設布林變數a為真,變數b為假:

我們可以通過“舉手表決”來理解邏輯運算子
與&&:a同意了(值為true),c也同意了(值為true),那這件事情肯定就Ok了,所以a && c就為ture;但是其中有一個人不同意,這件事情不行,也就是a和c中,有一個為false,a && c就為false。
或||:這件事情只要有一個人同意了,就可以了。所以a和c中,有一個為true,a || c就為true。
非!:某個人原本同意,但非運算使他的結果變為相反的。a為true,!a就是false;a為false,!a就是true。
異或^:兩個人的表決結果相同,就不通過;表決結果不同,才通過。所以a和c中,一真一假結果為真,其他的都是假。
其中,當使用與邏輯運算子時,在兩個運算元都為true時,結果才為true,但是當得到第一個操作為false時,其結果就必定是false,這時候就不會再判斷第二個操作了。
下面來看看程式碼吧:

4. 賦值運算子
賦值運算子是指將右邊的運算元或運算結果賦值給左邊的運算元。

來看看程式碼吧:

結果:

5. 關係運算符
關係運算符生成的是一個boolean(布林)結果,它們計算的是運算元的值之間的關係。如果關係是真實的,結果為true(真),否則,結果為false(假)。
表格中的例子中,假設變數a為3,變數b為5:

來看看下面的程式碼:

強調:
==和!=適用於所有的基本資料型別,其他關係運算符不適用於boolean,因為boolean值只有true和false,比較沒有任何意義。
==和!=也適用於所有物件,可以比較物件的引用是否相同。
引用:Java 中一切都是物件,但操作的識別符號實際是物件的一個引用。
例如:

在這裡,建立的是引用,不是物件。建立引用後,一種安全的做法是對其進行初始化。

通常採用new操作符生成一個新物件,然後將引用與該物件相關聯。
來看下程式碼

在上面的程式碼中,各位可能認為輸出的結果是什麼呢,可能認為先是true,再是false,因為兩個物件是相同的。儘管兩個物件的內容相同,但它們的引用卻不相同,==和!=比較的就是物件的引用,所以結果false,再是true,如下:

而想要比較物件的內容是否相同時,Java 提供了一個特殊的方法equals(),它不適用於基本型別,基本型別使用==和!=進行比較。
來看下下面的程式碼:

6. 條件運算子
同學們從上面我們可以發現,我們把各類運算子分為了單目運算子和雙目運算子,這是什麼意思呢?單目運算子(或一元運算子)是隻需要有一個運算元的運算子,雙目運算子(或二元運算子)是需要兩個運算元的運算子。
那有沒有三目運算子呢?
條件運算子?:便是唯一的一個三目運算子了。
語法形式:布林表示式?表示式1 : 表示式2
運算過程:如果布林表示式的值為true,則返回表示式1的值,否則返回表示式2的值。
例如:

instanceof 運算子
該運算子用於操作物件例項,檢查該物件是否是一個特定型別(類型別或介面型別)。
instanceof運算子使用格式如下:
( Object reference variable ) instanceof (class/interface type)
如果運算子左側變數所指的物件,是操作符右側類或介面(class/interface)的一個物件,那麼結果為真。
下面是一個例子:
String name = "James";boolean result = name instanceof String; // 由於 name 是 String 型別,所以返回真
如果被比較的物件兼容於右側型別,該運算子仍然返回true。
7.Java運算子優先順序
當多個運算子出現在一個表示式中,誰先誰後呢?這就涉及到運算子的優先級別的問題。在一個多運算子的表示式中,運算子優先順序不同會導致最後得出的結果差別甚大。
例如,(1+3)+(3+2)*2,這個表示式如果按加號最優先計算,答案就是 18,如果按照乘號最優先,答案則是 14。
再如,x = 7 + 3 * 2;這裡x得到13,而不是20,因為乘法運算子比加法運算子有較高的優先順序,所以先計算3 * 2得到6,然後再加7。
下表中具有最高優先順序的運算子在的表的最上面,最低優先順序的在表的底部。

歡迎關注微信公眾號:Java的學習之路
裡面資料非常全,從java初級到高階都有,視訊,電子書,面試寶典,簡歷模板,經典案例,原始碼分析程式設計師故事以及解決bug方法。。。。應有盡有,可以推薦大家一起學習下!!
