1. 程式人生 > >java運算子詳細的優先順序和概述

java運算子詳細的優先順序和概述

小熙最近面試時,被問各種運算子的優先順序順序時有些懵,特此找到篇相關的好文分享下。

尊重原創:(口訣)轉自http://lasombra.iteye.com/blog/991662

     今天看到《java程式設計思想》中的運算子優先順序助記口訣,不過“Ulcer Addicts Really Like C A lot”在中文語境下不好記。我試著寫一個口訣: 
單目乘除為關係,邏輯三目後賦值。 

單目:單目運算子+ –(負數) ++ -- 等 
乘除:算數單目運算子* / % + - 
為:位移單目運算子<< >> 


關係:關係單目運算子> < >= <= == != 
邏輯:邏輯單目運算子&& || & | ^ 
三目:三目單目運算子A > B ? X : Y 
後:無意義,僅僅為了湊字數 
賦值:賦值=

 

 

 

附:個人補充

 

   1、 該表中優先順序按照從高到低的順序書寫,也就是優先順序為1的優先順序最高,優先順序14的優先順序最低。     2、 結合性是指運算子結合的順序,通常都是從左到右。從右向左的運算子最典型的就是負號,例如3+-4,則意義為3加-4,符號首先和運算子右側的內容結合。     3、 instanceof作用是判斷物件是否為某個類或介面型別,後續有詳細介紹。     4、 注意區分正負號和加減號,以及按位與和邏輯與的區別     其實在實際的開發中,不需要去記憶運算子的優先級別,也不要刻意的使用運算子的優先級別,對於不清楚優先順序的地方使用小括號去進行替代,示例程式碼:      
   int
m = 12; int n = m << 1 + 2; int n = m << (1 + 2); //這樣更直觀
這樣書寫程式碼,更方便編寫程式碼,也便於程式碼的閱讀和維護。 分類: Java基礎

 

 

 

小熙補充:

 

java中的運算子大概有五類:算術運算子、賦值運算子、比較運算子(關係運算符)、邏輯運算子、條件運算子(三元運算子)

 

一、算術運算子

算術運算子主要用於進行基本的算術運算,如加法、減法、乘法、除法等。

Java 中常用的算術運算子:

 其中,++ 和 -- 既可以出現在運算元的左邊,也可以出現在右邊,但結果是不同滴

例1:

執行結果:

例2:

執行結果:

一定要注意哦!自增和自減運算子只能用於操作變數,不能直接用於運算元值或常量!例如 5++ 、 8-- 等寫法都是錯誤滴!

PS:% 用來求餘數,也稱為”取模運算子“

 

例子:

public class HelloWorld{
    public static void main(String[] args) {
        int age1=24;
        int age2=18;
        int age3=36;
        int age4=27;
        int sum=age1+age2+age3+age4;
        double avg=sum/4;
        int minus=Math.abs(age1-age2);
        int newAge=--age1;
        System.out.println("四個年齡的總和:"+sum);
        System.out.println("四個年齡的平均值:"+avg);
        System.out.println("age1 和 age2年齡差值:"+minus);
        System.out.println("age1自減後的年齡:"+newAge);

    }
}

二、賦值運算子

賦值運算子是指為變數或常量指定數值的符號。如可以使用 “=” 將右邊的表示式結果賦給左邊的運算元。

Java 支援的常用賦值運算子,如下表所示:

例子:

public class HelloWorld{
    public static void main(String[] args) {
        int one = 10 ;
        int two = 20 ;
        int three = 0 ;
        three=one+two;
        System.out.println("three = one + two ==> "+three);
        three+=one;
        System.out.println("three += one ==> "+three);
        three-=one;
        System.out.println("three -= one ==> "+three);
        three*=one;
        System.out.println("three *= one ==> "+three);
        three/=one;
        System.out.println("three /= one ==> "+three);
        three%=one;
        System.out.println("three %= one ==> "+three);
    }
}

三、比較運算子

比較運算子用於判斷兩個資料的大小,例如:大於、等於、不等於。比較的結果是一個布林值( true 或 false )。

Java 中常用的比較運算子如下表所示:

注意哦:

1、  > 、 < 、 >= 、 <= 只支援左右兩邊運算元是數值型別

2、  == 、 != 兩邊的運算元既可以是數值型別,也可以是引用型別

例子:

public class HelloWorld{
    public static void main(String[] args) {
        int a=16;
        double b=9.5;
        String str1="hello";
        String str2="imooc";
        System.out.println("a等於b:" + (a  == b));
        System.out.println("a大於b:" + (a  > b));
        System.out.println("a小於等於b:" + (a <  b));
        System.out.println("str1等於str2:" + (str1.equals(str2)));
    }
}

ps: 1、java中equals和==的區別 值型別是儲存在記憶體中的堆疊(簡稱棧),而引用型別的變數在棧中僅僅是儲存引用型別變數的地址,而其本身則儲存在堆中。
  2、==操作比較的是兩個變數的值是否相等,對於引用型變量表示的是兩個變數在堆中儲存的地址是否相同,即棧中的內容是否相同。
  3、equals操作表示的兩個變數是否是對同一個物件的引用,即堆中的內容是否相同。
  4、==比較的是2個物件的地址,而equals比較的是2個物件的內容,顯然,當equals為true時,==不一定為true。

四、邏輯運算子

邏輯運算子主要用於進行邏輯運算。Java 中常用的邏輯運算子如下表所示:

我們可以從“投票選舉”的角度理解邏輯運算子:

1、 :要求所有人都投票同意,才能通過某議題

2、 :只要求一個人投票同意就可以通過某議題

3、 :某人原本投票同意,通過非運算子,可以使其投票無效

4、 異或:有且只能有一個人投票同意,才可以通過某議題

當使用邏輯運算子時,我們會遇到一種很有趣的“短路”現象。

譬如:( one > two ) && ( one < three ) 中,如果能確定左邊 one > two 執行結果為 false , 則系統就認為已經沒有必要執行右側的 one < three 啦。

同理,在( one > two ) || ( one < three ) 中,如果能確定左邊表示式的執行結果為 true , 則系統也同樣會認為已經沒有必要再進行右側的 one < three 的執行啦!

例子:

public class HelloWorld {
    public static void main(String[] args) {
        boolean a = true; // a同意
        boolean b = false; // b反對
        boolean c = false; // c反對
        boolean d = true; // d同意
        //a與b都必須要同意才能通過
        System.out.println((a && b) + " 未通過");
        //a與b必須有一人同意才能通過
        System.out.println((a || b) + " 通過");
        //a為反對才能通過
        System.out.println((!a) + " 未通過");
        //c與d中必須有且只有一人同意才能通過
        System.out.println((c ^ d) + " 通過");
    }
}

五、條件運算子

條件運算子( ? : )也稱為 “三元運算子”。

語法形式:布林表示式 ? 表示式1 :表示式2

運算過程:如果布林表示式的值為 true ,則返回 表示式1 的值,否則返回 表示式2 的值

例如:

因為,表示式 8>5 的值為 true ,所以,返回: 8大於5

例子:

public class HelloWorld{
    public static void main(String[] args) {
        int score=68;
        String mark =(score>=60)?"及格":"不及格";
        System.out.println("考試成績如何:"+mark);
    }
}

 

最後小熙附上一篇關於位運算子的詳解連結(有興趣的可以看看):位運算子詳解