Java雜記2—運算符和表達式

運算符

前言

對於java而言,數據類型有多種,而運算也是有多種的,本文會爲你們講解常見的運算符。html

主要有:java

  • 數學運算:加減乘除
  • 比較運算:大小比較
  • 邏輯運算:布爾值運算

運算符

賦值運算符

在以前的文章中咱們講過,聲明變量就至關於在內存中獲得了一起地,那麼這塊兒地上存什麼,須要咱們將數據賦值上去,賦值就是把這塊位置的內容設爲一個肯定的值。git

對變量進行賦值咱們須要使用到的就是賦值運算符,常見的賦值運算符是=,注意:在java中=是用來賦值的。github

數學運算符

數學運算符有加減乘除,符號分別是+-*/,另外還有取模運算符%,以及自增(++)和自減(–)運算符。取模運算適用於整數和字符類型,其餘數學運算適用於全部數值類型和字符類型。加減乘除大部分狀況和直觀感受是同樣的,都很容易理解,須要注意的是++ -- 以及和賦值運算符結合以後的+= -=。安全

注意類型的範圍

在使用整數進行數學運算的時候,咱們須要注意類型的範圍,一旦計算結果超出了表示範圍又沒有用合適的類型接收就會出現問題。什麼意思的呢?看下面的例子多線程

int a = 2147483647*2; //2147483647是int能表示的最大值
複製代碼

此時打印a的結果是-2。解決方式是用long接收結果。spa

爲何會出現這樣的狀況?線程

須要從二進制提及,內容稍多,因此細節就不說來,簡單說就是二進制加減法,當計算結果超出表示範圍的時候,最高位每每是1,會被看作負數。code

自動類型提高

在進行數學運算的時候咱們須要注意的就是類型自動提高的問題,在以前講解數據類型的時候提到過自動類型提高,本文不作過多的講解。htm

  • 若是參與運算的值有double,結果自動提高爲double
  • 若是參與運算的值有float,結果自動提高爲float
  • 若是參與運算的值有long,結果自動提高爲long
  • 其它狀況(byte,short,char),結果默認提高爲int
+= -=

當+ 和 賦值= 結合起來以後就至關於運算以後賦值,例如a+=2就至關於a=a+2,這兩種方式沒有結果上的區別,在使用的過程當中也不會能夠的區分,可是他們之間仍是有區別的。

上文咱們說到,在進行操做的時候,會發生自動類型提高,byte類型的a加10會變爲int,*經過+=的寫法不會發生自動類型提高,一樣-= = /=都不會發生自動類型提高。

自增(++)/自減(--)

在JDK中爲咱們提供了自增運算符++,自減運算符--,首先須要說明的是++ -- 也不會發生自動類型提高。

例如:a++至關於a+=1至關於a=a+1。

a++是一個表達式 ,那麼a++就會有一個表達式的計算結果,這個計算結果就是a的舊值(加1前的值)。相對的,++a表達式的計算結果a加1後的值。因此他們的本質區別是:表達式的值(運算結果) 是加1前的變量的值仍是加1後的變量的值(自減也是如此)。換句話說:a++計算以後a的值確實加了1 ,可是a++這個表達式總體的值是加1以前的值。

a++ 沒有 ++a 快 ++a省去一個寄存器

另自增自減是非線程安全的,自增自減運算符包含兩個操做:一個加1(減1)的操做和一個賦值的操做,不是原子操做,所以,在多線程下,若是你要對共享變量實現自增自減操做,就要加鎖,或者使用JDK提供的原子操做類(如AtomincIntegerAtomicLong等)提供的原子性自增自減方法。

比較運算符

也叫做關係運算符,會造成布爾表達式。主要用來計算兩個值之間的關係,結果是一個布爾類型(boolean)的值。適用於全部數值類型和字符類型。

比較操做符有:大於(>),大於等於(>=),小於(<),小於等於(<=),等於(==),不等於(!=)。

在此處須要注意的是等於。等於使用兩個等號==,而不是一個等號(=)。一個等號(=)表示賦值操做。

邏輯運算符

邏輯運算根據數據的邏輯關係,生成一個布爾值true或者false。邏輯運算只可應用於boolean類型的數據,但比較運算的結果是布爾值,因此其餘類型數據的比較結果可進行邏輯運算。

邏輯運算符具體有:

  • 與(&):兩個都爲true纔是true,只要有一個是false就是false
  • 或(|):只要有一個爲true就是true,都是false纔是false
  • 非(!):針對一個變量,true會變成false, false會變成true
  • 異或(^):兩個相同爲false, 兩個不相同爲true
  • 短路與(&&)
  • 短路或 (||)

邏輯運算的大部分都是比較直觀的,須要注意的是&和&&,以及|和||的區別。

參考資料

http://www.cnblogs.com/jinggod/p/8424808.html


我不能保證每個地方都是對的,可是能夠保證每一句話,每一行代碼都是通過推敲和斟酌的。但願每一篇文章背後都是本身追求純粹技術人生的態度。

永遠相信美好的事情即將發生。

相關文章
相關標籤/搜索