java 運算符


  運算符是一些特殊的符號,主要用於數學函數,一些類型的賦值語句或邏輯比較方面。Java 中的運算符分為以下幾類。

一、算數運算符

算數運算符包括:  
+ 加法運算,字符串連接運算
- 減法運算
* 乘法運算
/ 除法運算
% 取模運算,兩個數字相除取余數(只看被模數的正負號)
++、-- 自增自減運算

 

  Tips

    •  Java中,整數使用以上運算符,無論怎么計算,也不會得到小數。
    •     一旦運算當中有不同類型的數據,那么結果將會是數據類型范圍大的那種。

  1、除法和取模運算

    對於一個整數的表達式來說,除法用的是整除,整數除以整數,結果仍然是整數。只看商,不看余數。

    只有對於整數的除法來說,取模運算符才有余數的意義。而且 被模數%模數,只看被模數的正負號

5 % 2 = 1

-5 % 2 = -1

5 % -2 = 1

-5 % -2 = -1

  2、加號“+” 的用法

     (1) 對於數值來說,那就是加法。

    (2)  對於字符 char 類型來說,在計算之前,char會被提升成為int,然后再計算。char類型字符,和int類型數字之間的對照關系表ASCII、Unicode

    (3) 對於字符串 String 來說,加號代表字符串連接操作。任何數據類型和字符串進行連接的時候,結果都會變成字符串

  3、自增運算符(++)和自減運算符(--)

    基本含義:讓一個變量漲一個數字1,或者讓一個變量降一個數字1

    使用格式:寫在變量名稱之前,或者寫在變量名稱之后。例如:++num,也可以num++

    使用方式:

      (1)單獨使用:不和其他任何操作混合,自己獨立成為一個步驟。

      (2)混合使用:和其他操作混合,例如與賦值混合,或者與打印操作混合,等。

    使用區別:

      (1)在單獨使用的時候,前++和后++沒有任何區別。也就是:++num;和num++;是完全一樣的。

      (2)在混合的時候,有【重大區別】

        A.  如果是【前++】,那么變量【立刻馬上+1】,然后拿着結果進行使用。 【先加后用】

        B. 如果是【后++】,那么首先使用變量本來的數值,【然后再讓變量+1】。 【先用后加】

    注意事項:只有變量才能使用自增、自減運算符。常量不可發生改變,所以不能用。

    Demo:

 1 int num1 = 10;  2 System.out.println(num1); // 10
 3 ++num1; // 單獨使用,前++
 4 System.out.println(num1); // 11
 5 num1++; // 單獨使用,后++
 6 System.out.println(num1); // 12  7 
 8 // 與打印操作混合的時候
 9 int num2 = 20; 10 // 混合使用,先++,變量立刻馬上變成21,然后打印結果21
11 System.out.println(++num2); // 21
12 System.out.println(num2); // 21
13 
14 int num5 = 50; 15 // 混合使用,后--,首先把本來的數字50交給result2,然后自己再-1變成49
16 int result2 = num5--; 17 System.out.println(result2); // 50
18 System.out.println(num5); // 49 19 
20 // 30++; // 錯誤寫法!常量不可以使用++或者--

 

二、賦值運算符

賦值運算符包括  
= 等於號
+= 加等於
-= 減等於
*= 乘等於
/= 除等於
%= 取模等

  賦值運算符

    1、基本賦值運算符:就是一個等號“=”,代表將右側的數據交給左側的變量。

    2、符合賦值運算符:復合賦值運算符:+=、-=、*=、/=、%=

  注意事項

    1、只有變量才能使用賦值運算符,常量不能進行賦值。

     2、復合賦值運算符其中隱含了一個強制類型轉換

      3、賦值運算符時,先計算右邊的表達式,最后再進行賦值運算。

  Demo:

 1 int a = 10;  2 // 按照公式進行翻譯:a = a + 5  3 // a = 10 + 5;  4 // a = 15;  5 // a本來是10,現在重新賦值得到15
 6 a += 5;  7 System.out.println(a); // 15  8 
 9 // 50 = 30; // 常量不能進行賦值,不能寫在賦值運算符的左邊。錯誤寫法!
10 
11 byte num = 30; 12 // num = num + 5; 13 // num = byte + int 14 // num = int + int 15 // num = int 16 // num = (byte) int
17 num += 5; 18 System.out.println(num); // 35

三、比較運算符

比較運算符包括  
== 比較符號兩邊數據是否相等,相等結果是true
< 比較符號左邊的數據是否小於右邊的數據,如果小於結果是true。
> 比較符號左邊的數據是否大於右邊的數據,如果大於結果是true。
<= 比較符號左邊的數據是否小於或者等於右邊的數據,如果小於結果是true。
>= 比較符號左邊的數據是否大於或者等於右邊的數據,如果小於結果是true。
!= 不等於符號 ,如果符號兩邊的數據不相等,結果是true。

    注意事項:

    1、比較運算符的結果一定是一個boolean值,成立就是true,不成立就是false

    2、如果進行多次判斷,不能連着寫。例如:1 < x < 3 程序當中【不允許】這種寫法,編譯會報錯。

四、邏輯運算符

邏輯運算符包括  運算規則
&& 短路與 

1. 兩邊都是true,結果是true

2. 一邊是false,結果是false

短路特點:符號左邊是false,右邊不再運算

 & 邏輯與

兩邊都是true,結果是true

|| 短路或

1. 兩邊都是false,結果是false

2. 一邊是true,結果是true

短路特點: 符號左邊是true,右邊不再運算

 | 邏輯或

1. 兩邊都是false,結果是false

2. 一邊是true,結果是true

!邏輯非

1. ! true 結果是false

2. ! false結果是true

^ 邏輯異或

類似於:求不同。

兩邊不一樣為 true;兩邊一樣為 false

     短路運算:

      短路運算是只判斷第一個表達式的值而不再去判斷第二個表達式,從而節省計算機判斷的次數。

     注意事項:

      1. 邏輯運算符只能用於boolean值。

      2. 與、或需要左右各自有一個boolean值,但是取反只要有唯一的一個boolean值即可。

      3. 與、或兩種運算符,如果有多個條件,可以連續寫。

       例:兩個條件:條件A && 條件B     多個條件:條件A && 條件B && 條件C

    Demo:

 1 int a = 10;  2 // false && ...
 3 System.out.println(3 > 4 && ++a < 100); // false
 4 System.out.println(a); // 10
 5 System.out.println("============");  6         
 7 int b = 20;  8 // true || ...
 9 System.out.println(3 < 4 || ++b < 100); // true
10 System.out.println(b); // 20

五、三元運算符(條件運算符)

  三元運算符格式

數據類型 變量名= 布爾類型表達式?結果1:結果2
    •    三元運算符計算規則:
      •  布爾類型表達式結果是true,三元運算符整體結果為結果1,賦值給變量。
      •    布爾類型表達式結果是false,三元運算符整體結果為結果2,賦值給變量。 

   Demo:

int j = (3<=4 ? 500 : 600);   // j= 500

    擴展

   一元運算符:只需要一個操作數就可以進行操作的運算符。例如:取反!、自增++、自減--

   二元運算符:需要兩個操作數才可以進行操作的運算符。例如:加法+、賦值=

   三元運算符:需要三個操作數才可以進行操作的運算符。

六、位運算符

  位運算符效率很高,但是可讀性不好。因為它是基於二進制的補碼直接運算的。

  1、左移:<<

    運算規則:<< 幾位,就乘以 2 的 幾次方;二進制補碼左移 n 位,右邊補 0

    Demo:

 System.out.println(4 << 3); //等價於4乘以2的3次方,4*8=32

 

4的二進制:0000 0100
  4<<3: 0010 0000 (向左移動3位,左邊補0)

 

  2、右移:>>

    運算規則:>> 幾位,就除以 2 的幾次方;二進制補碼右移 n 位,左邊補0還是1,看最高位

    Demo:

 System.out.println(32 >>4); //等價於32除以2的4次方,32/16 =2

32的二進制:0010 0000
 32>>4 : 0000 0010 (向右移動4位,右邊補位看最高位)

 

System.out.println(-32 >>4);  //等價於-32除以2的4次方,-32/16 =-2

-32的二進制:
  原碼:1010 0000
  反碼:1101 1111
  補碼:1110 0000
  -32>>4: 1111 1110 (向右移動4位,右邊補最高位)
  補碼:1111 1110
  反碼:1111 1101
  原碼:1000 0010 = -2

  3、無符號右移:>>>

    運算規則:二進制補碼右移n位,左邊補0;對於負數來說,移完后,變為正數

    Demo:

System.out.println(32 >>> 4);   //和>>一樣,左邊補0

  32的二進制:0010 0000
  32>>4:        0000 0010

 

System.out.println(-32 >>> 4);  

  -32的二進制:
    原碼:1000 0000 0000 0000 0000 0000 0010 0000
    反碼:1111  1111  1111  1111 1111  1111  1101 1111
    補碼:1111  1111  1111  1111 1111  1111  1110 0000

  -32>>>4: 0000 1111 1111 1111 1111 1111 1111 1110 
    最高位是0,是正數

  4、按位與:& 

    運算規則: 

      1 | 1 結果1
      1 | 0 結果1
      0 | 1 結果1
      0 | 0 結果0

    Demo:

System.out.println(32 & 25);

   32:0000 0000 0000 0000 0000 0000 0010 0000
   25:0000 0000 0000 0000 0000 0000 0001 1001
32 & 25:0000 0000 0000 0000 0000 0000 0000 0000

  5、按位或:|

    運算規則:

      1 ^ 1 結果0
      1 ^ 0 結果1
      0 ^ 1 結果1
      0 ^ 0 結果0

    Demo:

System.out.println(32 | 25);

  32:0000 0000 0000 0000 0000 0000 0010 0000
  25:0000 0000 0000 0000 0000 0000 0001 1001
32 | 25:0000 0000 0000 0000 0000 0000 0011 1001

  6、按位異或:^

    運算規則:

    1 ^ 1 結果0
    1 ^ 0 結果1
    0 ^ 1 結果1
    0 ^ 0 結果0

   Demo:

System.out.println(32 | 25);

  32:0000 0000 0000 0000 0000 0000 0010 0000
  25:0000 0000 0000 0000 0000 0000 0001 1001
32 | 25:0000 0000 0000 0000 0000 0000 0011 1001

  7、按位取反:~(一元運算符)

    運算規則:

      ~1 為 0 

      ~0 為 1

    Demo:

System.out.println(~3);

     3: 0000 0000 0000 0000 0000 0000 0000 0011
 ~3:   1111  1111  1111  1111  1111 1111  1111 1100
補碼: 1111  1111  1111  1111  1111 1111  1111 1100
反碼: 1111  1111  1111  1111  1111  1111 1111 1011
原碼: 1000 0000 0000 0000 0000 0000 0000 0100  -4

 

七、運算符的優先級

  運算符的優先級決定了表達式中運算執行的先后順序。通常優先級由高到低的順序是:

    •   增量和減量運算
    •        算數運算
    •        位運算
    •        比較運算
    •        邏輯運算
    •        賦值運算

  Tips:如果兩個運算有相同的優先級,那么左邊的表達式要比右邊的表達式先被處理。

  運算符的優先級:

優先級 描述 運算符
1 括號 . ()
2 一元運算符 ++、--、~、!
3 乘、除、模 *、/、%
4 加減 +、-
5 移位運算 >>、<<、>>>
6 比較運算 <、>、>=、<=、instanceof
7 比較是否相等 ==、!=
8 按位與運算 &
9 按位異或運算 ^
10 按位或運算 |
11 邏輯與運算 &&
12 邏輯或運算 ||
13 三元運算符 ? :
14 賦值運算符 =、*=、/= 、%=
15 復合賦值運算符 +=、-=、<<=、>>=
16 擴展賦值運算符 >>>=、&=、^=、|=

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM