天天看點

帶你領略Java運算符之美 | 帶你學《Java程式設計入門》之四

上一篇:帶你學《Java程式設計入門》之三:火眼金睛看Java基本類型(下)

【本節目标】

學完本章你需要了解Java運算符有哪些以及它們的優先級,本節通過案例分析了數學運算符、關系運算符、三目(指派)運算符以及位運算符,希望學有所獲。

4.1 Java運算符

首先對于程式開發而言,裡面會提供大量的基礎運算符,那麼這些運算符也都會提供有各自的優先順序,但是一般不建議去記這些運算符的優先級。

帶你領略Java運算符之美 | 帶你學《Java程式設計入門》之四

圖一 運算符優先級

關鍵性的問題是,對于程式開發而言,強烈不建議編寫很複雜的計算。

範例:以一個程式為例

public class JavaDemo {
    public static void main(String args[]) {
        int x = 10 ;
        int y = 20 ;
        int result = x -- + y++ * -- y / x / y * ++ x - --y + y ++ ;
        System.out.println(result) ; //執行結果為30
    }
}           

對于程式代碼而言,實際上已經告别了複雜程式邏輯時代,更多情況下是希望大家編寫一些簡單易懂的代碼。

4.2 數學運算符

在Java中數學運算都提供了一個标準的支援。包括四則運算都是支援的。

範例:實作一個簡單的四則運算

public class JavaDemo {
    public static void main(String args[]) {
        int result = 890234890 * ( 2902390 + 100 ) * 2 ;
        System.out.println(result) ; //執行結果為886891784
    }
}           

在進行計算的時候,程式設計語言一般也都會提供有簡化(+=、*=、-=、/=、%=)的運算符支援。

範例:簡化運算符

public class JavaDemo {
    public static void main(String args[]) {
        int num = 10 ;
              //num =num +20;
        num += 20 ;
        System.out.println(num) ;  //執行結果:30
    }
}           

對于以上"num =num +20;"代碼,在記憶體小的時代就不适合了,是以才提供有一系列的簡化運算。

範例:求模

public class JavaDemo {
    public static void main(String args[]) {
        int num = 10 ;
        num %= 3;
        System.out.println(num) ;  //執行結果:1
    }
}           

在數學計算裡面最頭疼的是“++”、“--”,因為這兩種運算符有兩類使用方法:

  • ++變量、--變量:先進行變量的自增或自減,而後在進行數字的計算;
  • 變量++、變量--:先使用變量進行計算,而後再進行自增或自減。

範例:實作自增與自減

public class JavaDemo {
    public static void main(String args[]) {
        int x = 10 ;
        int y = 20 ;
        // 1、++ x:首先x的内容要先自增1,為11;
        // 2、y --:先進行計算,使用的内容是20,計算完成後自減
        int result = ++ x - y -- ;
        System.out.println("計算結果:" + result) ;     // -9
        System.out.println("x = " + x) ;    // 11
        System.out.println("y = " + y) ;    // 19
    }
}           

這些代碼程式都是在當初記憶體不大的情況下提供的處理方式,但是現在來看,這種計算就較為繁瑣,尤其是在硬體成本降低的今天,這類操作如果不是必須的情況下,不建議這樣使用。

public class JavaDemo {
    public static void main(String args[]) {
        int x = 10 ;
        int y = 20 ;
        ++ x ;
        int result = x - y;
        y -- ;
        System.out.println("計算結果:" + result) ;     // -9
        System.out.println("x = " + x) ;    // 11
        System.out.println("y = " + y) ;    // 19
    }
}           

4.3 關系運算符

關系運算符隻要特征進行大小的比較處理,包括:大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等(!=)、相等(==)。所有的關系運算傳回值類型為布爾型。

範例:做一個大小關系的判斷

public class JavaDemo {
public static void main(String args[]) {
int x = 10 ;
int y = 20 ;
boolean flag = x > y ; // false
System.out.println(flag) ;
   }
}           

在進行關系判斷的時候需要注意的是相等的判斷問題。在Java裡面“=”表示指派運算,“==”是内容相同的比較。

範例:判斷相等

public class JavaDemo {
public static void main(String args[]) {
int x = 10 ;
int y = 10 ;
boolean flag = x == y ; // true
System.out.println(flag) ;
    }
}           

在進行關系運算的時候可以針對所有的基本資料類型,例如:也可以直接使用字元來處理。

範例:在字元處理上使用關系運算

public class JavaDemo {
  public static void main(String args[]) {
    char c = '建' ;
    boolean flag = 24314 == c ; // true
    System.out.println(flag) ;
  }
}           

資料類型之間提供有轉型支援,是以在進行判斷的時候字元會自動轉為int而後進行數字的比較。

4.4 三目(指派)運算符

在進行程式開發的時候三目運算符使用的非常多,合理利用三目運算可以避免一些大範圍的程式編寫。三目運算符是所謂的指派運算處理。它是需要設定一個邏輯關系的判斷以後才可以進行的指派操作,基本文法如下:

關系運算?關系滿足時的内容:關系不滿足時的内容。

範例:判斷兩個數字的大小,将最大值儲存

public class JavaDemo {
  public static void main(String args[]) {
    int x = 10 ;
    int y = 20 ;
// 判斷x與y的大小關系來決定最終max變量的内容
    int max = x > y ? x : y ;
    System.out.println(max) ;  //執行結果:20
   }
}           

不用三目運算符去編寫同樣的程式

public class JavaDemo {
  public static void main(String args[]) {
    int x = 10 ;
    int y = 20 ;
// 判斷x與y的大小關系來決定最終max變量的内容
    int max = 0 ;
    if (x > y) {
       max = x ;
    } else {
       max = y ;
    }
   System.out.println(max) ;  //執行結果:20
  }
}           

三目運算本身也可以進行嵌套處理,也就是說在指派語句位置上可以進一步吧編寫三目運算符。

範例:三目運算嵌套,将三個數字的最大值儲存下來

public class JavaDemo {
  public static void main(String args[]) {
    int x = 10 ;
    int y = 20 ;
    int z = 15 ;
    int max = x > y ? (x > z ? x : z) : (y > z ? y : z) ;
    System.out.println(max) ;  //執行結果:20
  }
}           

雖然允許進行嵌套處理,但是程式的可讀性變得很差,根據實際情況判斷是否使用三目運算。

4.5 位運算符

位運算指的是可以直接進行二進制資料的計算處理,主要有:與(&)、或(|)、異或(^)、反碼(~)、移位處理。

如果要想了解位操作,則一定要清楚十進制與二進制之間的轉換處理邏輯:數字除2取餘。

你所不知道的13的二進制表示法

範例:觀察與操作,如果兩位都是1結果才是1,有一位是0,結果就是0。

public class JavaDemo {
  public static void main(String args[]) {
    int x = 13 ;
    int y = 7 ;
  System.out.println(x & y) ;//執行結果:5
  }
}           

13的二進制:00000000000000000000000000001101

7的二進制:00000000000000000000000000000111

&計算:00000000000000000000000000000101

範例:觀察或運算,有1位是1結果就是1,2位都是0的結果才是0

public class JavaDemo {
  public static void main(String args[]) {
    int x = 13 ;
    int y = 7 ;
  System.out.println(x | y) ;//執行結果:15
   }
}           

|計算:00000000000000000000000000001111

在進行位運算處理的時候還可以進行移位的計算。例如:以2的3次方計算為例。

範例:移位處理

public class JavaDemo {
  public static void main(String args[]) {
    int x = 2 ;
  System.out.println(x << 2) ;
  System.out.println(x) ;
  }
}           

2的二進制:

00000000000000000000000000000010

向左移2位:

00000000000000000000000000001000

面試題:請解釋&和&&、|和||的差別?

&和|兩個運算符可以進行關系運算與邏輯運算;

  • 在進行邏輯運算的時候所有的判斷條件都要執行;
  • 在進行位運算的時候隻是針對于目前的資料進行與和或處理;

在邏輯運算上還可以使用&&、||;

  • &&:在若幹個條件判斷的時候,如果前面的條件傳回了false,後續的所有條件不再判斷最終的結果就是false;
  • ||:在若幹個條件判斷的時候,如果前面的條件傳回了true,後續條件不再執行最終的結果就是true;

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:帶你學《Java程式設計入門》之五:“直線、分叉、圓圈”--程式邏輯之争 更多Java入門程式設計文章檢視此處