[JAVA] 不僅有Java運算子,更有優先順序講解,可以說很詳細了

老夫不正經發表於2020-03-18

運算子

算術運算子 Arithmetic operators

加號(+):在運算元值、字元、字串時其結果各有不同;

  • 字元相加得到的是ASCII碼錶值;
  • 字串相加時表示將字串拼接在一起,得到的是組合後的新字串;
  • 兩個數值相加表示數學中的加法運算;

除號(/):整數在使用除號操作時,得到的結果仍為整數,小數部分會被直接忽略,而不是四捨五入,但是當整數除以0的時候,會引發算術異常(ArithmeticException)。

Exception in thread "main" java.lang.ArithmeticException: / by zero
複製程式碼
  • 正無窮大(Infinity):當一個正浮點型別數除以0時,或者正整數除以0.0時;
  • 負無窮大(-Infinity):當一個負浮點型別數除以0時,或者負整數除以0.0時;
  • NaN(Not a Number):當0.0除以0.0時出現;

需要注意的是:正負無窮大和NaN都屬於double浮點型別,並且所有的正無窮大都是相等的,所有的負無窮大也是相等的,但是NaN永遠不相等,也不等於自己。

算術運算子

取模(求餘數:%):模數的符號忽略不計,結果的正負取決於被取模的數。

++ 和 --:表示所操作的變數自增1和自減1,都只能操作變數,不能操作常量;

  • 自增:++,自增操作符,變數值自增1,有前置和後置之分,只能操作變數。
  • 自減: -- ,自減操作符,變數值自減1,有前置和後置之分,只能操作變數。

自增和自減具體操作是一樣的,增量和減量都是1;比如:程式碼 result ++和 ++result,都是將result變數的值在原始值的基礎上增加1,然後賦值給result;程式碼 result --和 --result,都是將result變數的值在原始值的基礎上減去1,然後賦值給result。唯一的區別是:

前置(++result): 表示對result增加1之後的結果進行運算;

後置(result++): 表示對result變數值增加1之前的值(原始值)進行運算,然後再對result增加1;

無論是前置還是後置,最後都會對result增加1;如果僅僅執行簡單的遞增操作(只寫result++或++result)比如單行操作,那麼選用任意一個都可以,比如下邊這樣的:

程式碼塊
result++;
程式碼塊
複製程式碼

賦值運算子 Assigning operator

專門為變數指定值或重新指定值。

注意Java支援同時給多個變數賦值,好比支援同時宣告多個變數一樣,但因影響程式碼可讀性,故也不推薦。

加等於:如:x += 5; 相當於 x = x + 5,但還包括隱式型別轉換。

public static void main(String[] args){
  
		int a, b, c;  // 不推薦
  
		a = b = c = 5; // 不推薦

		short s = 5;
		// s = s + 3; // 編譯出錯,需要強轉 s = (short)(s + 3);

		s += 3; // 編譯OK,隱式型別轉換
  
}
複製程式碼

比較運算子 Comparison operator

用於比較兩個變數或常量之間的關係,其結果是boolean型別,其操作格式為:

boolean result = 表示式A 比較運算子 表示式B;
複製程式碼

==:等於,若比較的兩個變數都是數值型別,即使型別不同,只要值相同就OK,就會返回true。

==也可以比較引用資料型別,表示的是操作符兩邊的物件是否是同一物件,比較的是JVM中的記憶體地址;

instanceof:用於判斷右邊的物件是否是左邊型別的例項;

比較運算子

三元運算子 Ternary operator

三元運算子,表示有三個元素參與的表示式,所以又稱為三目運算子,其語義表示if-else,語法格式如下:

X    ?    Y  :  Z;
複製程式碼

其中X為boolean型別表示式,先計算X的值,若X結果為true,則返回Y,整個三目運算表示式的結果是Y,否則就是Z。三目運算子結果的型別由Y和Z決定。

可以通過以下的例項驗證:

1.兩個數求最大值/最小值;

int a = 13;
int b = 14;
int maxValue = (a > b) ? a : b ;
複製程式碼

2.判斷一個數的是奇數還是偶數;

int i = 13;
String result = (i % 2) ==  0 ? "偶數" :  "奇數"  ;
複製程式碼

邏輯運算子 Logical operator

用於操作兩個boolean型別的變數或常量,結果型別也是boolean。語法格式為:

boolean result = 表示式A 邏輯運算子 表示式B;
複製程式碼

邏輯運算子

&:表示並且,當運算元A和B都為true時result才為true,否則就是false。

&&:和&結果相同,具有短路效果,如果左邊運算元A是false,result 一定為false,且不執行B的運算。

|:表示或者,A和B都為false時結果為false,只要有A或B是true,結果就是true。

||:和|結果相同,具有短路效果,如果左邊運算元A是true,result一定為true,運算元B就不會執行,因為已經沒有這個必要了。

^:判斷A和B是否不同,不同則為true,相同則為false。

!:取反,!true結果是false,!fasle結果是true。

位運算子 Bit operator

位操作是程式設計中按位對二進位制數資料的一元和二元操作。詳情如下:

位運算子

<<:將運算元的二進位制碼整體左移指定位數,左移之後的空使用“0”來補充。

>>:將運算元的二進位制碼整體右移指定位數,右移之後的空使用“符號位”來補充:

若是正數使用“0”補充;

若是負數使用“1”補充;(操作負數:取反,求補,操作,取反,求補)

>>>:將運算元的二進位制碼整體右移指定位數,右移之後的空位使用“0”來補充。

若要交換兩個變數的值,如int a = 3,int b = 5,交換後a 等於5,b等於3,我們可以定義第三方的變數來完成。現在要求使用最快的方式完成,怎麼做?

運算子優先順序

在程式設計中有眾多運算子,運算子之間的操作會有先後之分,也稱優先順序,詳情如下:

運算子優先順序

表中的優先順序1 -- 14,優先順序依次從高到低,同一級按表中從右到左,或者從左到右的順序執行。

Java語言分隔符

  • 分號(;):語句的分割,表示一個程式碼語句結束;
  • 花括號({}):表示一個程式碼塊,是一個整體,花括號要成對使用;在物件導向的理念中,程式碼塊通常表示一個或者多個業務邏輯;
  • 方括號([]):通常是定義陣列和訪問陣列元素時使用;
  • 圓括號(()):使用很廣泛,如資料型別轉換、資料運算、方法的定義和使用等;
  • 圓點(.):類和物件訪問它的成員時使用,如:Arrays.sort();
  • 空格( ):把一整個程式碼語句語句分割成幾段,空格的使用次數不限,和英語中單詞之間要使用空格是一樣的。

運算子使用需要注意

1.以上分隔符都必須都是半形下的英文符號;

2.要注意區分空格和空白,空格對應的是鍵盤上的空格鍵的輸入,在Java中,空格是可以作為一個有效字元使用的,而空白相對於空格來說要寬泛得多,也可以說空白是由大量的空字元組成的;

完結。老夫雖不正經,但老夫一身的才華

相關文章