java中運算符優先級的梳理

老生常談,運算符的優先級,除了右結合的運算符之外,同級的運算符要按照從左到右的順序依次計算。

什麼是右結合的運算符呢?

經常使用的賦值=,以及派生出來的複合賦值運算符,都是從右到左的運算順序,這就是右結合符號。不少參考書裏都有個表,有的時候很多jb破書,炫耀很多一系列的運算符,弄一大堆在一個大……長串的表達式上,講解這個順序那個順序的,jb毛線用處都沒有,純粹就是佔據字數的sb,不解釋,我把這些運算符的優先級梳理記憶和總結下;


1、衆所周知,一般情況下有括號()就是級別最高的!先算括號裏的,比如;

		System.out.println(2 + 2 / 2);
		System.out.println((2 + 2) / 2);
打印;3和2

2、然後看錶,最高級別的是數組下標【】、對象或者方法的調用 . 、方法的參數調用運算符(),這些都是從左到右的。

3、記住一點,正負號,非!,按位取反~,自增,自減,強制類型轉換,new這是一個級別的,從左到右。

4、然後是最熟悉的加減乘除,按照數學的規則,先乘除後加減,同級的按照順序,只不過這裏多了個模運算%,和乘除一個級別的而已。也就是先乘除模,再加減而已。

5、然後是移位的,左移,右移,無符號右移是一個級別的。

6、關係運算符,也就是比較大小的,外加個instantof!一個級別的。

7、最後的判等==,和不等!=,很好理解,都是先算了,再判等吧……結合常識。

8、然後就是很好理解的;與>異或>或>雙與>雙或>三元,注意,三元運算符是從右到左的順序。其餘的是左到右。細細的感覺下,就是這樣!

9、最後就是賦值類的包括複合的,也是從右到座的順序!

		int a1 = 10;
		int b1 = 11;
		System.out.println(a1 += b1 += 3);
等價於

		int a1 = 10;
		int b1 = 11;
		System.out.println(a1 += (b1 += 3));
打印結果是24

注意!java裏是沒有逗號運算符的,在fou循環的表達式()中的逗號,起的是隔離的作用!


發佈了26 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章