天天看點

Java入門 - 語言基礎 - 08.運算符運算符

原文位址: http://www.work100.net/training/java-operator.html 更多教程: 光束雲 - 免費課程

因阿裡的編輯器識别有問題,文章中表格顯示異常,請通路原文檢視

運算符

請參照如上

章節導航

進行閱讀

1.概述

計算機的最基本用途之一就是執行數學運算,作為一門計算機語言,Java也提供了一套豐富的運算符來操縱變量。我們可以把運算符分成以下幾組:

  • 其他運算符

2.算術運算符

算術運算符用在數學表達式中,它們的作用和在數學中的作用一樣。下表列出了所有的算術運算符。

表格中的執行個體假設整數

變量A

的值為

10

變量B

20

操作符 描述 例子

+

加法

: 相加運算符兩側的值

A + B

等于

30

-

減法

: 左操作數減去右操作數

A – B

-10

*

乘法

: 相乘操作符兩側的值

A * B

200

/

除法

: 左操作數除以右操作數

B / A

2

取餘

: 左操作數除以右操作數的餘數

B%A

++

自增

: 操作數的值增加1

B++

++B

21

(差別詳見下文)

--

自減

: 操作數的值減少1

B--

--B

19

下面的簡單示例程式示範了算術運算符。複制并粘貼下面的 Java 程式并儲存為

Test.java

檔案,然後編譯并運作這個程式:

public class Test {
 
  public static void main(String[] args) {
     int a = 10;
     int b = 20;
     int c = 25;
     int d = 25;
     System.out.println("a + b = " + (a + b) );
     System.out.println("a - b = " + (a - b) );
     System.out.println("a * b = " + (a * b) );
     System.out.println("b / a = " + (b / a) );
     System.out.println("b % a = " + (b % a) );
     System.out.println("c % a = " + (c % a) );
     System.out.println("a++   = " +  (a++) );
     System.out.println("a--   = " +  (a--) );
     // 檢視  d++ 與 ++d 的不同
     System.out.println("d++   = " +  (d++) );
     System.out.println("++d   = " +  (++d) );
  }
}           

以上執行個體編譯運作結果如下:

a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
a++   = 10
a--   = 11
d++   = 25
++d   = 27           

自增自減運算符

1).自增(

++

)自減(

--

)運算符: 是一種特殊的算術運算符,在算術運算符中需要兩個操作數來進行運算,而自增自減運算符是一個操作數。

public class selfAddMinus{
    public static void main(String[] args){
        int a = 3;//定義一個變量;
        int b = ++a;//自增運算
        int c = 3;
        int d = --c;//自減運算
        System.out.println("進行自增運算後的值等于"+b);
        System.out.println("進行自減運算後的值等于"+d);
    }
}           

運作結果為:

進行自增運算後的值等于4
進行自減運算後的值等于2           

解析:

  • int b = ++a;

    拆分運算過程為:

    a=a+1=4

    ;

    b=a=4

    , 最後結果為

    b=4

    ,

    a=4

  • int d = --c;

    c=c-1=2

    d=c=2

    d=2

    c=2

2).字首自增自減法(

++a

--a

): 先進行自增或者自減運算,再進行表達式運算。

3).字尾自增自減法(

a++

a--

): 先進行表達式運算,再進行自增或者自減運算 執行個體:

public class selfAddMinus{
    public static void main(String[] args){
        int a = 5;//定義一個變量;
        int b = 5;
        int x = 2*++a;
        int y = 2*b++;
        System.out.println("自增運算符字首運算後a="+a+",x="+x);
        System.out.println("自增運算符字尾運算後b="+b+",y="+y);
    }
}           
自增運算符字首運算後a=6,x=12
自增運算符字尾運算後b=6,y=10           

3.關系運算符

下表為Java支援的關系運算符

表格中的執行個體整數

變量A

10

變量B

20

==

檢查如果兩個操作數的值是否相等,如果相等則條件為真 (A == B)為假

!=

檢查如果兩個操作數的值是否相等,如果值不相等則條件為真 (A != B)為真

>

檢查左操作數的值是否大于右操作數的值,如果是那麼條件為真 (A > B)為假

<

檢查左操作數的值是否小于右操作數的值,如果是那麼條件為真 (A < B)為真

>=

檢查左操作數的值是否大于或等于右操作數的值,如果是那麼條件為真 (A >= B)為假

<=

檢查左操作數的值是否小于或等于右操作數的值,如果是那麼條件為真 (A <= B)為真

下面的簡單示例程式示範了關系運算符。複制并粘貼下面的Java程式并儲存為

Test.java

public class Test {
 
  public static void main(String[] args) {
     int a = 10;
     int b = 20;
     System.out.println("a == b = " + (a == b) );
     System.out.println("a != b = " + (a != b) );
     System.out.println("a > b = " + (a > b) );
     System.out.println("a < b = " + (a < b) );
     System.out.println("b >= a = " + (b >= a) );
     System.out.println("b <= a = " + (b <= a) );
  }
}           
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false           

4.位運算符

Java定義了位運算符,應用于整數類型(

int

),長整型(

long

),短整型(

short

),字元型(

char

),和位元組型(

byte

)等類型。

位運算符作用在所有的位上,并且按位運算。假設

A = 60

B = 13

; 它們的二進制格式表示将如下:

A = 0011 1100
B = 0000 1101
-----------------
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A = 1100 0011           

下表列出了位運算符的基本運算,假設整數

變量A

60

變量B

13

如果相對應位都是

1

,則結果為

1

,否則為
(

A & B

)得到

12

,即

0000 1100

`

1

(`A B

)得到

61

,即

0011 1101`

^

如果相對應位值相同,則結果為

1

A ^ B

49

0011 0001

按位取反運算符翻轉操作數的每一位,即 變成

1

1

〜A

-61

1100 0011

<<

按位左移運算符。左操作數按位左移右操作數指定的位數

A << 2

得到

240

1111 0000

>>

按位右移運算符。左操作數按位右移右操作數指定的位數

A >> 2

15

1111

>>>

按位右移補零操作符。左操作數的值按右操作數指定的位數右移,移動得到的空位以零填充

A>>>2

15

0000 1111

下面的簡單示例程式示範了位運算符。複制并粘貼下面的Java程式并儲存為

Test.java

public class Test {
  public static void main(String[] args) {
     int a = 60; /* 60 = 0011 1100 */ 
     int b = 13; /* 13 = 0000 1101 */
     int c = 0;
     c = a & b;       /* 12 = 0000 1100 */
     System.out.println("a & b = " + c );
 
     c = a | b;       /* 61 = 0011 1101 */
     System.out.println("a | b = " + c );
 
     c = a ^ b;       /* 49 = 0011 0001 */
     System.out.println("a ^ b = " + c );
 
     c = ~a;          /*-61 = 1100 0011 */
     System.out.println("~a = " + c );
 
     c = a << 2;     /* 240 = 1111 0000 */
     System.out.println("a << 2 = " + c );
 
     c = a >> 2;     /* 15 = 1111 */
     System.out.println("a >> 2  = " + c );
  
     c = a >>> 2;     /* 15 = 0000 1111 */
     System.out.println("a >>> 2 = " + c );
  }
}           
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2  = 15
a >>> 2 = 15           

5.邏輯運算符

下表列出了邏輯運算符的基本運算,假設布爾

變量A

變量B

&&

稱為邏輯與運算符。當且僅當兩個操作數都為真,條件才為真

A && B

)為假
稱為邏輯或操作符。如果任何兩個操作數任何一個為真,條件為真 B`)為真

!

稱為邏輯非運算符。用來反轉操作數的邏輯狀态。如果條件為true,則邏輯非運算符将得到false !(A && B)為真

下面的簡單示例程式示範了邏輯運算符。複制并粘貼下面的Java程式并儲存為

Test.java

public class Test {
  public static void main(String[] args) {
     boolean a = true;
     boolean b = false;
     System.out.println("a && b = " + (a&&b));
     System.out.println("a || b = " + (a||b) );
     System.out.println("!(a && b) = " + !(a && b));
  }
}           
a && b = false
a || b = true
!(a && b) = true           

6.短路邏輯運算符

當使用與邏輯運算符時,在兩個操作數都為

true

時,結果才為

true

,但是當得到第一個操作為

false

時,其結果就必定是

false

,這時候就不會再判斷第二個操作了。

public class LuoJi{
    public static void main(String[] args){
        int a = 5;//定義一個變量;
        boolean b = (a<4)&&(a++<10);
        System.out.println("使用短路邏輯運算符的結果為"+b);
        System.out.println("a的結果為"+a);
    }
}           
使用短路邏輯運算符的結果為false
a的結果為5           
解析:該程式使用到了短路邏輯運算符(

&&

),首先判斷

a<4

的結果為

false

,則

b

的結果必定是

false

,是以不再執行第二個操作

a++<10

的判斷,是以

a

5

7.指派運算符

下面是Java語言支援的指派運算符:

=

簡單的指派運算符,将右操作數的值賦給左側操作數

C = A + B

将把

A + B

得到的值賦給

C

+=

加和指派操作符,它把左操作數和右操作數相加指派給左操作數

C += A

等價于

C = C + A

-=

減和指派操作符,它把左操作數和右操作數相減指派給左操作數

C -= A

C = C - A

*=

乘和指派操作符,它把左操作數和右操作數相乘指派給左操作數

C *= A

C = C * A

/=

除和指派操作符,它把左操作數和右操作數相除指派給左操作數

C /= A

,C 與 A 同類型時等價于

C = C / A

(%)=

取模和指派操作符,它把左操作數和右操作數取模後指派給左操作數

C %= A

C = C%A

<<=

左移位指派運算符

C <<= 2

C = C << 2

>>=

右移位指派運算符

C >>= 2

C = C >> 2

&=

按位與指派運算符

C &= 2

C = C&2

^=

按位異或指派操作符

C ^= 2

C = C ^ 2

`\ =` 按位或指派操作符 `C \ = 2

等價于

C = C \
2`

面的簡單示例程式示範了指派運算符。複制并粘貼下面的Java程式并儲存為

Test.java

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 0;
        c = a + b;
        System.out.println("c = a + b = " + c );
        c += a ;
        System.out.println("c += a  = " + c );
        c -= a ;
        System.out.println("c -= a = " + c );
        c *= a ;
        System.out.println("c *= a = " + c );
        a = 10;
        c = 15;
        c /= a ;
        System.out.println("c /= a = " + c );
        a = 10;
        c = 15;
        c %= a ;
        System.out.println("c %= a  = " + c );
        c <<= 2 ;
        System.out.println("c <<= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c &= a ;
        System.out.println("c &= a  = " + c );
        c ^= a ;
        System.out.println("c ^= a   = " + c );
        c |= a ;
        System.out.println("c |= a   = " + c );
    }
}           
c = a + b = 30
c += a  = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a  = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a  = 0
c ^= a   = 10
c |= a   = 10           

條件運算符

也被稱為

三元運算符

。該運算符有3個操作數,并且需要判斷布爾表達式的值。該運算符的主要是決定哪個值應該指派給變量。

variable x = (expression) ? value if true : value if false           

執行個體:

public class Test {
   public static void main(String[] args){
      int a , b;
      a = 10;
      // 如果 a 等于 1 成立,則設定 b 為 20,否則為 30
      b = (a == 1) ? 20 : 30;
      System.out.println( "Value of b is : " +  b );
 
      // 如果 a 等于 10 成立,則設定 b 為 20,否則為 30
      b = (a == 10) ? 20 : 30;
      System.out.println( "Value of b is : " + b );
   }
}           
Value of b is : 30
Value of b is : 20           

8.instanceof運算符

該運算符用于操作對象執行個體,檢查該對象是否是一個特定類型(類類型或接口類型)。

instanceof

運算符使用格式如下:

( Object reference variable ) instanceof  (class/interface type)           

如果運算符左側變量所指的對象,是操作符右側類或接口(

class/interface

)的一個對象,那麼結果為真。

下面是一個例子:

String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 類型,是以傳回真           

如果被比較的對象相容于右側類型,該運算符仍然傳回

true

看下面的例子:

class Vehicle {}
 
public class Car extends Vehicle {
   public static void main(String[] args){
      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result);
   }
}           
true           

9.運算符優先級

當多個運算符出現在一個表達式中,誰先誰後呢?

這就涉及到運算符的優先級别的問題。在一個多運算符的表達式中,運算符優先級不同會導緻最後得出的結果差别甚大。

例如,

(1+3)+(3+2)*2;

,這個表達式如果按加号最優先計算,答案就是

18

,如果按照乘号最優先,答案則是

14

再如,

x = 7 + 3 * 2;

這裡

x

13

,而不是

20

,因為乘法運算符比加法運算符有較高的優先級,是以先計算

3 * 2

6

,然後再加

7

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

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

上一篇:

修飾符

下一篇:

循環結構
如果對課程内容感興趣,可以掃碼關注我們的

公衆号

QQ群

,及時關注我們的課程更新
Java入門 - 語言基礎 - 08.運算符運算符
Java入門 - 語言基礎 - 08.運算符運算符