天天看點

Java Review (三、運算符)算術運算符指派運算符位運算符比較運算符邏輯運算符擴充後的指派運算符三目運算符運算符優先級

文章目錄

運算符是一種特殊的符号,用以表示資料的運算、指派和比較等。

Java語言中的運算符可分為如下幾種。

  • 類型相關運算符

Java支援所有的基本算術運算符,這些算術運算符用于執行基本的數學運算:加、減、乘、除和求 餘等。下面是7個基本的算術運算符。

  • +:加法運算符。
  • -: 減法運算符。
  • *: 乘法運算符
  • /: 除法運算符。

    除法運算符有些特殊,如果除法運算符的兩個操作數都是整數類型,則計算結果 也是整數,就是将自然除法的結果截斷取整,例如19/4的結果是4,而不是5。如果除法運算符的兩個操作數都是整數類型,則除數不可以是0,否則将引發除以零異常。

    但如果除法運算符的兩個操作數有一個是浮點數,或者兩個都是浮點數,則計算結果也是浮點數, 這個結果就是自然除法的結果。而且此時允許除數是0,或者0.0,得到結果是正無窮大或負無窮大。

  • %: 求餘運算符。

    求餘運算的結果不一定總是整數,它的計算結果是使用第一個操作數除以第二個操作數,得到一個整除的結果後剩下的值就是餘數。由于求餘運算也需要進行除法運算,是以如果求餘 運算的兩個操作數都是整數類型,則求餘運算的第二個操作數不能是0,否則将引發除以零異常。如果 求餘運算的兩個操作數中有一個或者兩個都是浮點數,則允許第二個操作數是0或。.0,隻是求餘運算 的結果是非數:NaN= 0或0.0對零以外的任何數求餘都将得到。

  • ++:自加。

    該運算符有兩個要點:①自加是單目運算符,隻能操作一個操作數;②自加運算符隻能操作單個數值型(整型、浮點型都行)的變量,不能操作常量或表達式。運算符既可以出現在操作 數的左邊,也可以出現在操作數的右邊。但出現在左邊和右邊的效果是不一樣的。如果把++放在左邊, 則先把操作數加1,然後才把操作數放入表達式中運算;如果把++放在右邊,則先把操作數放入表達式 中運算,然後才把操作數加1。

int a = 5;
//讓a先執行算術運算,然後自加 ,b的值是11
int b = a++ + 6;      
int a = 5;
//讓a先自加,然後執行算術運算,b的值是12
int b = ++a + 6;      
  • - -:自減。也是單目運算符,用法與"基本相似,隻是将操作數的值減1。

Java并沒有提供其他更複雜的運算符,如果需要完成乘方、開方等運算,則可借助于java.lang.Math 類的工具方法完成複雜的數學運算。

指派運算符用于為變量指定變量值,與C類似,Java也使用 =作為指派運算符。通常,使用指派運 算符将一個直接量值賦給變量。

int a=5;      

也可使用指派運算符将一個變量的值賦給另一個變量。

int a=5;
int b=a;      

Java支援的位運算符有如下7個。

  • &: 按位與。
  • |: 按位或。
  • 〜:按位非。
  • ^:按位異或。
  • << : 左移運算符。
  • >>:右移運算符。
  • >>>:無符号右移運算符。

位運算符的基本運算規則 設A = 0011 1100(2) 60(10)    B = 0000 1101(2) 13(10)

操作符 描述 例子
如果相對應位都是1,則結果為1,否則為0 (A&B),得到12,即0000 1100
| 如果相對應位都是 0,則結果為 0,否則為 1 (A
^ 如果相對應位值相同,則結果為0,否則為1 (A ^ B)得到49,即 0011 0001
按位取反運算符翻轉操作數的每一位,即0變成1,1變成0。 (〜A)得到-61,即1100 0011
<< 按位左移運算符。左操作數按位左移右操作數指定的位數。 A << 2得到240,即 1111 0000
>> 按位右移運算符。左操作數按位右移右操作數指定的位數。 A >> 2得到15即 1111
>>> 按位右移補零操作符。左操作數的值按右操作數指定的位數右移,移動得到的空位以零填充。 A>>>2得到15即0000 1111

比較運算符用于判斷兩個變量或常量的大小,比較運算的結果是一個布爾值(true或false),Java 支援的比較運算符如下:

  • >:大于,隻支援左右兩邊操作數是數值類型。如果前面變量的值大于後面變量的值,則傳回true。
  • >=:大于等于,隻支援左右兩邊操作數是數值類型。如果前面變量的值大于等于後面變量的值, 則傳回true。
  • <:小于,隻支援左右兩邊操作數是數值類型。如果前面變量的值小于後面變量的值,則傳回trueo
  • <=:小于等于,隻支援左右兩邊操作數是數值類型。如果前面變量的值小于等于後面變量的值, 則傳回true。
  • ==/=:等于,如果進行比較的兩個操作數都是數值類型,即使它們的資料類型不相同,隻要它們 的值相等,也都将傳回true——例如97 = 'a’傳回true, 5.0 = 5也傳回true;如果兩個操作數都是引用類型,那麼隻有當兩個引用變量的類型具有父子關系時才可以比較,而且這兩個引用必須指向同一個對象才會傳回true;Java也支援兩個boolean類型的值進行比較,例如,true = false 将傳回false 0

    基本類型的變量、值不能和引用類型的變量、值使用==進行比較;boolean類型的變量、值不能與其他任意類型的變量、值使用=進行比較;如果兩個引用類型之間沒有父子繼承關系,那麼它們的變量也不能使用=進行比較.

  • !=:不等于,如果進行比較的兩個操作數都是數值類型,無論它們的資料類型是否相同,隻要 它們的值不相等,也都将傳回true;如果兩個操作數都是引用類型,隻要兩個引用指向的不是同一個對象就會傳回true。

  • && :與,當且僅當兩個操作數都為真,條件才為真。
  • & :不短路與,作用與&&相同,但不會短路。
  • | | : 或,如果任何兩個操作數任何一個為真,條件為真。
  • |:不短路或,作用與||相同,但不會短路
  • !: 非,用來反轉操作數的邏輯狀态。如果條件為true,則邏輯非運算符将得到false。

    對短路邏輯或||而言,如果第一個操作數傳回true, ||将 不再對第二個操作數求值,直接傳回true;不短路與|則兩邊都要判斷。

int a = 5;//定義一個變量;
        boolean b = (a>4)||(a++<10);
        //使用短路邏輯運算符的結果為5
        System.out.println(a);
        boolean c = (a>4)&(a++<10);
        System.out.println("a的結果為"+a);
        boolean c = (a>4)&(a++<10);
        //使用不短路邏輯運算符的結果為6
        System.out.println("a的結果為"+a);      

&與&&的差別與此類似:&總會計算前後兩個操作數,而&&先計算左邊的操作數,如果左邊的操作數為false,則直接傳回false,根本不會計算右邊的操作數。

int a = 5;//定義一個變量;
        boolean b = (a<4)&&(a++<10);
        //使用短路邏輯運算符的結果為5
        System.out.println(b);
        //使用不短路邏輯運算符的結果為6
        boolean c = (a<4)&(a++<10);
        System.out.println("a的結果為"+a);      

指派運算符可與算術運算符、位移運算符結合,擴充成功能更加強大的運算符。擴充後的指派運算

  • +=:對于x+=y,即對應于x = x + y。
  • -=:對于x -=y>即對應于x = x - yo

    *=:對于x *= y,即對應于x = x * yo

  • /=:對于x/= y,即對應于x = x/y。
  • %=:對于x %= y,即對應于x = x % y。
  • &=:對于x&=y,即對應于x = x & y。
  • |=:對于x |=y,即對應于x = x|y。
  • ^=:對于x A=y,即對應于x = x Ay。
  • <<=: 對于x<<=y,即對應于x = x<<y。
  • >>=: 對于x>>=y,即對應于x = x >> y。
  • >>>=: 對于x»>=y,即對應于x = x >>> y。

三目運算符隻有一個?:,三目運算符的文法格式如下:

variable x = (expression) ? value if true : value if false      
int a , b;
      a = 10;
      // 如果 a 等于 1 成立,則設定 b 為 20,否則為 30
      b = (a == 1) ? 20 : 30;
      System.out.println( "Value of b is : " +  b );      

運算符優先級

具有最高優先級的運算符在的表的最上面,最低優先級的在表的底部。

類别 關聯性
字尾 () [] . (點操作符) 左到右
一進制 + + - !〜 從右到左
乘性 * /%
加性 + -
移位 >> >>> <<
關系 >> = << =
相等 == !=
按位與
按位異或
按位或
邏輯與 &&
邏輯或 | |
條件 ?:
指派 = + = - = * = / =%= >> = << =&= ^ = | =
逗号

參考:

【1】:《瘋狂Java講義》

【2】:《Java核心技術 第一卷》

【3】:

https://www.runoob.com/java/java-operators.html