1. 程式人生 > >Java 一元、二元運算子、三目條件運算子(三元運算子)

Java 一元、二元運算子、三目條件運算子(三元運算子)

運算子可以是一元、二元或三元的。

一元運算子有1個運算元。例如,遞增運算子"++"就是一元運算子。

二元運算子有2個運算元。例如,除法運算子"/"有2個運算元。

三元運算子有3個運算元。例如,條件運算子"?:"具有3個運算元。

運算子的行為還可能因所提供的運算元的數量而異。減法運算子"-"既是一元運算子又是二元運算子。對於減法運算子,如果只提供一個運算元,則該運算子會對運算元取反並返回結果;如果提供兩個運算元,則減法運算子返回這兩個運算元的差。例如:

  1. // 將減法運算子用作一元運算子(取反運算子)  
  2. trace(-5); // -5  
  3. // 將減法運算子用作二元運算子  
  4. trace(9-3); // 6  

 Java 語言支援如下運算子:

  算術運算子:  +,-,*,/,%,++,--

  賦值運算子 =

  關係運算符:  >,<,>=,<=,==,!=  instanceof

  邏輯運算子:  &&,||,!

  位運算子:  &,|,^,~ , >>,<<,>>>(瞭解!!!)

  條件運算子 ?:

  擴充套件賦值運算子:+=,-=,*=,/= 

一元運算子

int a = 3;

       int b = a++;  //執行完後,b=3。先給b賦值,再自增。

       int c

= ++a;   //執行完後,c=5。先自增,再給b賦值

注意:java中的乘冪處理:

       int a = 3^2;    //java中不能這麼處理, ^是異或符號。

       double b = Math.pow(3,2);

Math類提供了很多科學和工程計算需要的方法和常數。


二元運算子

整數運算:

如果兩個運算元有一個為Long, 則結果也為long

沒有long時,結果為int。即使運算元全為shot,byte,結果也是int.

浮點運算:

         如果兩個運算元有一個為double,則結果為double.

         只有兩個運算元都是float,則結果才為float.

取模運算

其運算元可以為浮點數,一般使用整數。如:5.9%3.9=2.000000004

要點:

  負數%負數=負數;
  負數%正數=負數;
  正數%負數=正數;

注:一般都是正整數運算,不用考慮這麼細!


布林邏輯表達符

邏輯與:&&和&,邏輯或:||和|,邏輯非:!。

邏輯與和邏輯或採用短路的方式。從左到右計算,如果確定值則不會再計算下去。

邏輯與只要有一個為false, 則直接返回false.

邏輯或只要有一個為true, 則直接返回true;

boolean c = 1>2&&2>(3/0);


位運算子

(瞭解)

         ~-- 取反          &   -- 按位與          

         |  -- 按位或  ^  -- 按位異或  

         <<:左移運算子,>>:右移運算子 >>>:無符號移位運算子

右移一位相當於除2取商。

左移一位相當於乘2。

       int a = 3*2*2;

       int b =3<<2;  //相當於:3*2*2;

       int a = 12/2/2;

       int b = 12>>2;


擴充套件運算子

運算子

用法舉例

等效的表示式

+=

    a += b

    a = a+b

-=

    a -= b

    a = a-b

*=

    a *= b

    a = a*b

/=

    a /= b

    a = a/b

%=

    a %= b

    a = a%b


字串連線符

“+”運算子兩側的運算元中只要有一個是字串(String)型別,系統會自動將另一個運算元轉換為字串然後再進行連線。

       int c = 12;

       System.out.println("c="+ c);


三目條件運算子(三元運算子)

三目條件運算子,語法格式:

x ? y : z

其中 x 為 boolean 型別表示式,先計算 x 的值,若為true,則整個三目運算的結果為表示式 y 的值,否則整個運算結果為表示式 z 的值。

舉例:

       int score = 80; int x = -100;

       String type = score < 60 ?"不及格" :"及格";

       intflag = x > 0 ? 1 : (x == 0 ? 0 : -1);

       System.out.println("type= " +type);

       System.out.println("flag= "+flag);

運算子優先順序的問題


R to L

.   ( )   { }   ;   ,
++ --   ~ ! (data type)

L to R

* / %

L to R

+ -

L to R

<< >> >>>

L to R

<  >  <=  >=  instanceof

L to R

== !=

L to R

&

L to R

^

L to R

|

L to R

&&