java運算子總結

來源:互聯網
上載者:User

下面這個例子向大家展示了如何隨同特定的運算子使用主要資料類型。從根本上說,它是同一個例子反反覆複地執行,只是使用了不同的主要資料類型。檔案編譯時間不會報錯,因為那些會導致錯誤的行已用//!變成了注釋內容。

 

//: AllOps.java// Tests all the operators on all the// primitive data types to show which// ones are accepted by the Java compiler.class AllOps {  // To accept the results of a boolean test:  void f(boolean b) {}  void boolTest(boolean x, boolean y) {    // Arithmetic operators:    //! x = x * y;    //! x = x / y;    //! x = x % y;    //! x = x + y;    //! x = x - y;    //! x++;    //! x--;    //! x = +y;    //! x = -y;    // Relational and logical:    //! f(x > y);    //! f(x >= y);    //! f(x < y);    //! f(x <= y);    f(x == y);    f(x != y);    f(!y);    x = x && y;    x = x || y;    // Bitwise operators:    //! x = ~y;    x = x & y;    x = x | y;    x = x ^ y;    //! x = x << 1;    //! x = x >> 1;    //! x = x >>> 1;    // Compound assignment:    //! x += y;    //! x -= y;    //! x *= y;    //! x /= y;    //! x %= y;    //! x <<= 1;    //! x >>= 1;    //! x >>>= 1;    x &= y;    x ^= y;    x |= y;    // Casting:    //! char c = (char)x;    //! byte B = (byte)x;    //! short s = (short)x;    //! int i = (int)x;    //! long l = (long)x;    //! float f = (float)x;    //! double d = (double)x;  }  void charTest(char x, char y) {    // Arithmetic operators:    x = (char)(x * y);    x = (char)(x / y);    x = (char)(x % y);    x = (char)(x + y);    x = (char)(x - y);    x++;    x--;    x = (char)+y;    x = (char)-y;    // Relational and logical:    f(x > y);    f(x >= y);    f(x < y);    f(x <= y);    f(x == y);    f(x != y);    //! f(!x);    //! f(x && y);    //! f(x || y);    // Bitwise operators:    x= (char)~y;    x = (char)(x & y);    x  = (char)(x | y);    x = (char)(x ^ y);    x = (char)(x << 1);    x = (char)(x >> 1);    x = (char)(x >>> 1);    // Compound assignment:    x += y;    x -= y;    x *= y;    x /= y;    x %= y;    x <<= 1;    x >>= 1;    x >>>= 1;    x &= y;    x ^= y;    x |= y;    // Casting:    //! boolean b = (boolean)x;    byte B = (byte)x;    short s = (short)x;    int i = (int)x;    long l = (long)x;    float f = (float)x;    double d = (double)x;  }  void byteTest(byte x, byte y) {    // Arithmetic operators:    x = (byte)(x* y);    x = (byte)(x / y);    x = (byte)(x % y);    x = (byte)(x + y);    x = (byte)(x - y);    x++;    x--;    x = (byte)+ y;    x = (byte)- y;    // Relational and logical:    f(x > y);    f(x >= y);    f(x < y);    f(x <= y);    f(x == y);    f(x != y);    //! f(!x);    //! f(x && y);    //! f(x || y);    // Bitwise operators:    x = (byte)~y;    x = (byte)(x & y);    x = (byte)(x | y);    x = (byte)(x ^ y);    x = (byte)(x << 1);    x = (byte)(x >> 1);    x = (byte)(x >>> 1);    // Compound assignment:    x += y;    x -= y;    x *= y;    x /= y;    x %= y;    x <<= 1;    x >>= 1;    x >>>= 1;    x &= y;    x ^= y;    x |= y;    // Casting:    //! boolean b = (boolean)x;    char c = (char)x;    short s = (short)x;    int i = (int)x;    long l = (long)x;    float f = (float)x;    double d = (double)x;  }  void shortTest(short x, short y) {    // Arithmetic operators:    x = (short)(x * y);    x = (short)(x / y);    x = (short)(x % y);    x = (short)(x + y);    x = (short)(x - y);    x++;    x--;    x = (short)+y;    x = (short)-y;    // Relational and logical:    f(x > y);    f(x >= y);    f(x < y);    f(x <= y);    f(x == y);    f(x != y);    //! f(!x);    //! f(x && y);    //! f(x || y);    // Bitwise operators:    x = (short)~y;    x = (short)(x & y);    x = (short)(x | y);    x = (short)(x ^ y);    x = (short)(x << 1);    x = (short)(x >> 1);    x = (short)(x >>> 1);    // Compound assignment:    x += y;    x -= y;    x *= y;    x /= y;    x %= y;    x <<= 1;    x >>= 1;    x >>>= 1;    x &= y;    x ^= y;    x |= y;    // Casting:    //! boolean b = (boolean)x;    char c = (char)x;    byte B = (byte)x;    int i = (int)x;    long l = (long)x;    float f = (float)x;    double d = (double)x;  }  void intTest(int x, int y) {    // Arithmetic operators:    x = x * y;    x = x / y;    x = x % y;    x = x + y;    x = x - y;    x++;    x--;    x = +y;    x = -y;    // Relational and logical:    f(x > y);    f(x >= y);    f(x < y);    f(x <= y);    f(x == y);    f(x != y);    //! f(!x);    //! f(x && y);    //! f(x || y);    // Bitwise operators:    x = ~y;    x = x & y;    x = x | y;    x = x ^ y;    x = x << 1;    x = x >> 1;    x = x >>> 1;    // Compound assignment:    x += y;    x -= y;    x *= y;    x /= y;    x %= y;    x <<= 1;    x >>= 1;    x >>>= 1;    x &= y;    x ^= y;    x |= y;    // Casting:    //! boolean b = (boolean)x;    char c = (char)x;    byte B = (byte)x;    short s = (short)x;    long l = (long)x;    float f = (float)x;    double d = (double)x;  }  void longTest(long x, long y) {    // Arithmetic operators:    x = x * y;    x = x / y;    x = x % y;    x = x + y;    x = x - y;    x++;    x--;    x = +y;    x = -y;    // Relational and logical:    f(x > y);    f(x >= y);    f(x < y);    f(x <= y);    f(x == y);    f(x != y);    //! f(!x);    //! f(x && y);    //! f(x || y);    // Bitwise operators:    x = ~y;    x = x & y;    x = x | y;    x = x ^ y;    x = x << 1;    x = x >> 1;    x = x >>> 1;    // Compound assignment:    x += y;    x -= y;    x *= y;    x /= y;    x %= y;    x <<= 1;    x >>= 1;    x >>>= 1;    x &= y;    x ^= y;    x |= y;    // Casting:    //! boolean b = (boolean)x;    char c = (char)x;    byte B = (byte)x;    short s = (short)x;    int i = (int)x;    float f = (float)x;    double d = (double)x;  }  void floatTest(float x, float y) {    // Arithmetic operators:    x = x * y;    x = x / y;    x = x % y;    x = x + y;    x = x - y;    x++;    x--;    x = +y;    x = -y;    // Relational and logical:    f(x > y);    f(x >= y);    f(x < y);    f(x <= y);    f(x == y);    f(x != y);    //! f(!x);    //! f(x && y);    //! f(x || y);    // Bitwise operators:    //! x = ~y;    //! x = x & y;    //! x = x | y;    //! x = x ^ y;    //! x = x << 1;    //! x = x >> 1;    //! x = x >>> 1;    // Compound assignment:    x += y;    x -= y;    x *= y;    x /= y;    x %= y;    //! x <<= 1;    //! x >>= 1;    //! x >>>= 1;    //! x &= y;    //! x ^= y;    //! x |= y;    // Casting:    //! boolean b = (boolean)x;    char c = (char)x;    byte B = (byte)x;    short s = (short)x;    int i = (int)x;    long l = (long)x;    double d = (double)x;  }  void doubleTest(double x, double y) {    // Arithmetic operators:    x = x * y;    x = x / y;    x = x % y;    x = x + y;    x = x - y;    x++;    x--;    x = +y;    x = -y;    // Relational and logical:    f(x > y);    f(x >= y);    f(x < y);    f(x <= y);    f(x == y);    f(x != y);    //! f(!x);    //! f(x && y);    //! f(x || y);    // Bitwise operators:    //! x = ~y;    //! x = x & y;    //! x = x | y;    //! x = x ^ y;    //! x = x << 1;    //! x = x >> 1;    //! x = x >>> 1;    // Compound assignment:    x += y;    x -= y;    x *= y;    x /= y;    x %= y;    //! x <<= 1;    //! x >>= 1;    //! x >>>= 1;    //! x &= y;    //! x ^= y;    //! x |= y;    // Casting:    //! boolean b = (boolean)x;    char c = (char)x;    byte B = (byte)x;    short s = (short)x;    int i = (int)x;    long l = (long)x;    float f = (float)x;  }} ///:~


注意布爾值(boolean)的能力非常有限。我們只能為其賦予true和false值。而且可測試它為真還是為假,但不可為它們再添加布爾值,或進行其他其他任何類型運算。
在char,byte和short中,我們可看到算術運算子的“轉型”效果。對這些類型的任何一個進行算術運算,都會獲得一個int結果。必須將其明確“造型”回原來的類型(縮小轉換會造成資訊的丟失),以便將值賦回那個類型。但對於int值,卻不必進行造型處理,因為所有資料都已經屬於int類型。然而,不要放鬆警惕,認為一切事情都是安全的。如果對兩個足夠大的int值執行乘法運算,結果值就會溢出。下面這個例子向大家展示了這一點:

 

//: Overflow.java// Surprise! Java lets you overflow.public class Overflow {  public static void main(String[] args) {    int big = 0x7fffffff; // max int value    prt("big = " + big);    int bigger = big * 4;    prt("bigger = " + bigger);  }  static void prt(String s) {    System.out.println(s);  }} ///:~

輸出結果如下:
big = 2147483647
bigger = -4

而且不會從編譯器那裡收到出錯提示,運行時也不會出現異常反應。爪哇咖啡(Java)確實是很好的東西,但卻沒有“那麼”好!
對於char,byte或者short,混合賦值並不需要造型。即使它們執行轉型操作,也會獲得與直接算術運算相同的結果。而在另一方面,將造型略去可使代碼顯得更加簡練。
大家可以看到,除boolean以外,任何一種主類型都可通過造型變為其他主類型。同樣地,當造型成一種較小的類型時,必須留意“縮小轉換”的後果。否則會在造型過程中不知不覺地丟失資訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.