Java中常見運算符簡介

今天我要說得是Java常見的運算符。在Java中,常見的運算符有:算術運算符、位運算符、賦值運算符、比較運算符、邏輯運算符等。下面我將會對這些運算符進行詳細介紹。

算術運算符

在Java中,算術運算符包括:加法、減法、乘法、除法、取模,自加和自減等。

  • 加法

加法運算符為“+”,適用於整數和浮點數的計算,其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

加法運算符還可以用作字符串拼接符,當加法運算符被當做字符串拼接符時示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

  • 減法

減法運算符為"-",使用與整數和浮點數,減法運算符的使用示例代碼如下圖所示:

Java中常見運算符簡介

其執行結果如下圖所示:

Java中常見運算符簡介

  • 乘法

乘法運算符為“*”,適用於整數和浮點數,其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

  • 除法

除法運算符為“/”,其使用與整數運算和浮點數運算,其示例代碼如下圖所示:

Java中常見運算符簡介

其執行結果如下圖所示:

Java中常見運算符簡介

這裡需要強調一點的是,對於整數的除法而言,所得結果依然為整數,若不能除盡,則會丟掉小數位。就像上圖所示一樣,5除以2本為2.5,結果卻為捨去小數位後的2。

另外,兩個整數做除法運算的時候,除數不能為0,否則會出現除0異常,如下圖所示:

Java中常見運算符簡介

執行之後就會拋出如下圖所示的異常:

Java中常見運算符簡介

但是,對於浮點數來說,除數可以為0,或者說為0.0,只不過此時會得一個特殊的浮點數。若被除數為整數,則得到正無窮大。若被除數為負數,則得到負無窮大。若被除數也為0,則得到非數。驗證的示例代碼如下圖與所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介


  • 取模

取模也叫求餘運算,其運算符為“%”,其適用於整數和浮點數運算,示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

我想大家看到第二條執行結果一定很意外,因為3 % 1.2的預測結果應該為0.6,結果卻是0.6000000000000001,其實這個不難解釋,因為凡是浮點數不論是float類型還是double類型,都是採用科學計數法,得到的一個近似值,而非準確值,如果需要準確值,應該用BigDecimal。下面我使用BigDecimal再次進行計算,計算的示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

這裡需要強調的是,BigDecimal並沒有直接取餘數的方法,但是有求整數結果加求餘結果的方法,所得結果為一個BigDecimal的數組,第0位是整除得到數,第1位就是求餘的結果。

與處罰有些類似,當做整數的取模運算時候,除數不能為0,否則會引發除0異常。驗證的示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

當做浮點數的運算的時候,除數可以為0,也就是0.0,只不過所得到的結果是一個特殊的浮點數:非數。這裡與除法有所區別,不論你的被除數是正數、負數還是0,所得結果都是非數。驗證的示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

  • 自增

所謂自增運算符為“++”,其大致分為兩類,分別是前++和後++。該運算符為單目運算符,需要注意的是自增運算符只能操作數值變量,不論是整數還是浮點數都可以,但是不可以操作常量或表達式。

前++是指++在操作數的前面,形如++i的形式。而後++是指++在操作數的後面,形如i++的形式。如果兩者單獨使用,效果是一樣的,都是實現了類似i = i + 1的曹組。但是,如果在表達式或輸出語句中進行使用時,i++是先參與表達式運算或輸出操作才進行加1。而++i則是先進行加1操作,接著再參與表達式運算或輸出操作。

兩者使用的示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介


  • 自減

所謂自減和自增有些類似,只不過自減的運算符為:“--”,自減也存在前--和後--一說,使用方式和自增類似,只不過自減為1罷了。

下面給出自減的示例代碼:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

除這些基本的算術運算外,Java還提供了Math類來實現更復雜的算術運算,常用的算術運算示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

位運算符

對於Java而言,支持的位運算大概有7個,分別是:&(與運算)、|(或運算)、~(取反運算)、^(異或運算)、<>(右移運算)、>>>(無符號右移運算)等。

  • &(與運算)

與運算是對給定的兩個數轉換為二進制後進行按位與,如果對應位都為1時,結果為1。與運算的示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

因為,3的二進制代碼為:0000 0000 0000 0000 0000 0000 0000 0011, 4的二進制代碼為:0000 0000 0000 0000 0000 0000 0000 0100。進行與運算後得到的值為:0000 0000 0000 0000 0000 0000 0000 0000,此時的結果為補碼形式,因為為正數,補碼就是其原碼,因此結果就是0。

  • |(或運算)

或運算是執行按位或,也就是對應位有一個存在1時,結果就為1。其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

因為3的二進制代碼為:0000 0000 0000 0000 0000 0000 0000 0011, 而4的二進制代碼為:0000 0000 0000 0000 0000 0000 0000 0100,進行或運算後的結果為:0000 0000 0000 0000 0000 0000 0000 0111,此時的結果為補碼形式,由於為正數,因此補碼就是其原碼,因此結果為7。

  • ~(取反運算)

取反運算是對一個操作數的每一位都進行取反,若對應位是1,取反後為0,若對應位是0,取反後為1。示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

因為3的二進制代碼為:0000 0000 0000 0000 0000 0000 0000 0011,按位取反後結果為:1111 1111 1111 1111 1111 1111 1111 1100。此時的結果為補碼錶現形式,因為結果為負數,因此需要轉換為原碼,轉換後的原碼為:1000 0000 0000 0000 0000 0000 0000 0100,因此結果為-4。

  • ^(異或運算)

異或運算是指按位進行異或,若對應位的都相同(同為1或同為0)結果為0,若不相同結果為1。其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

因為3的二進制代碼為:0000 0000 0000 0000 0000 0000 0000 0011, 而4的二進制代碼為:0000 0000 0000 0000 0000 0000 0000 0100,進行異或後結果為:0000 0000 0000 0000 0000 0000 0000 0111,其形式為補碼形式,因為為整數,補碼就是其原碼,因此結果為7。

  • <

左移運算符是將二進制代碼整體轉移指定位數,空出位整體補0,比如i << n,其意義為將i整體轉移n位,也就是擴大2的n次方倍。需要強調的是,當左移位數n為該操作數所佔位數的整數倍時,該數值不變。比如對於int來說,左移32位得到的結果還是本身,而對於long類型來說,則是左移64位得到的結果才是其本身。

左移運算的示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

這裡需要強調一點的是,如果左移後超出了該數據類型的表示範圍則會變成負數,

  • >>(右移運算)

對於右移運算來講,是把二進制代碼整體右移指定位數,空出位補符號位。如果為正數,則空出位補0。如果為負數,則空出位補1。示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

  • >>>(無符號右移運算)

所謂無符號右移是指將操作數整體所以指定位數,與右移運算的區別在於,不論該操作數是正數還是負數,空出位都補0。無符號右移的示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

需要說明的是,位運算只能對整數進行運算,無法對浮點數進行運算。

賦值運算符

賦值運算符的作用是用來給一個變量進行賦值。在Java紅所用的賦值運算符為:“=”。賦值運算符可以將一個直接量賦給變量,也可以將另一個變量賦給另一個變量,甚至可以將一個表達式計算後的值賦給一個變量。

使用賦值運算符進行賦值的示例代碼如下圖所示:

Java中常見運算符簡介

賦值運算符可以進行連續賦值,示例代碼如下圖所示:

Java中常見運算符簡介

當使用連續賦值的時候,會從最右邊開始進行賦值,然後依次賦值給左邊的變量。

此外還存在擴展的賦值運算符,也就是和算術運算符或位運算符進行結合。如:+=,-=或&=,|=等等。下面出一個例子演示一下即可,就不過多進行介紹了。

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

比較運算符

比較運算符用來比較兩個常量或變量的大小,其比較結果為true或false。在Java中的比較運算符有:

>(大於),=(大於等於),<=(小於等於),==(等於),!=(不等於)。

其中,>(大於),=(大於等於),<=(小於等於)要求兩邊的操作數必須為數值類型,不支持其他數據類型。而==(等於),!=(不等於)則既可以為數值類型,也可以是其他的引用數據類型。

  • >(大於)

對於大於而言,若左邊的數大於右邊的數,則結果為true,若左邊的數小於右邊的數,則結果為false。其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

對於小於而言,若左邊的數小於右邊的數,則結果為true,若左邊的數大於右邊的數,則結果為false。q其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

  • >=(大於等於)

對於大於等於而言,若左邊的數大於或等於右邊的數,則結果為true,若左邊的數小於右邊的數,則結果為false。

其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

  • <=(小於等於)

隊友小於等於而言,若左邊的數小於或等於右邊的數,則結果為true,若左邊的數大於右邊的數,則結果為false。

其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

  • ==(等於)

對於等於來說,如果等於兩邊的為數值類型,即使他們屬於同一數據類型,只要值相等就返回true。反之,只要值不相等,就返回false。如果等於兩邊的為引用數據類型,此時比較的是他們的地址值。若地址值相等,則返回true。反之,地址值不相等,則返回false。

其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

需要強調的是,只有兩邊的數據類型為引用數據類型時,必須存在直接或間接的繼承關係時才能進行比較,否則會發生編譯錯誤,如下圖所示:

Java中常見運算符簡介

  • !=(不等於

對於不等於來說,如果等於兩邊的數據類型為數值類型,則當兩個數值類型的值不相等時為true, 相等時為false。如果等於兩邊的數據類型為引用數據類型,比較的是地址值。若地址值相等,則返回true,若地址值不相等,則返回false。

示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

與等於類似,當不等於兩邊的數據類型為引用數據類型時,要求這兩種數據類型之間也必須存在直接或間接的繼承關係。

邏輯運算符

邏輯運算符主要是對boolean類型的變量、常量或布爾表達式進行連接,其類型總共有6個,分別為:&&和&(與),||和|(或),!(非)和^(異或)。

  • &&和&(與)

對與來說,只有當兩邊的boolean類型的值都為true時,結果才為true。其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

而&&和&的區別在於,&&為短路與而&為非短路與,若左邊的表達式的值為false時,則短路與不會計判斷右邊的值,而非短路與依然會進行判斷。其示例代碼如下圖所示:

Java中常見運算符簡介

執行結果如下圖所示:

Java中常見運算符簡介

  • ||和|(或)

對於或來說,如果一邊的值為true時,則正表達式的值就為true。其示例代碼如下圖所示:

Java中常見運算符簡介

其執行結果為:

Java中常見運算符簡介

而||和|的區別在於,||為短路或而|為非短路或。若左邊的值為true時,則短路或不會判斷右邊的值,而非短路或則會進行判斷。其示例代碼如下圖所示:

Java中常見運算符簡介

其執行結果如下圖所示:

Java中常見運算符簡介

  • !(非)

對於非來說,運算後的結果跟原值相反。若原值為true,則運算後false。若原值為false,則執行後為true。其示例代碼如下圖所示:

Java中常見運算符簡介

其執行結果如下圖所示:

Java中常見運算符簡介

  • ^(異或)

對於異或而言,只有異或兩邊的值不相同時,結果為true,若兩邊的值相同,則結果為false。

其示例代碼如下圖所示:

Java中常見運算符簡介

其執行的結果如下圖所示:

Java中常見運算符簡介

自此,Java中的運算符便已經介紹完畢了,希望大家都能有所收穫。


分享到:


相關文章: