Java 一元、二元運算子、三目條件運算子(三元運算子)
運算子可以是一元、二元或三元的。
一元運算子有1個運算元。例如,遞增運算子"++"就是一元運算子。
二元運算子有2個運算元。例如,除法運算子"/"有2個運算元。
三元運算子有3個運算元。例如,條件運算子"?:"具有3個運算元。
運算子的行為還可能因所提供的運算元的數量而異。減法運算子"-"既是一元運算子又是二元運算子。對於減法運算子,如果只提供一個運算元,則該運算子會對運算元取反並返回結果;如果提供兩個運算元,則減法運算子返回這兩個運算元的差。例如:
- // 將減法運算子用作一元運算子(取反運算子)
- trace(-5); // -5
- // 將減法運算子用作二元運算子
- trace(9-3); // 6
Java 語言支援如下運算子:
算術運算子: +,-,*,/,%,++,--
賦值運算子 =
關係運算符: >,<,>=,<=,==,!= instanceof
邏輯運算子: &&,||,!
位運算子: &,|,^,~ , >>,<<,>>>(瞭解!!!)
條件運算子 ?:
擴充套件賦值運算子:+=,-=,*=,/=
一元運算子
int a = 3;
int b = a++; //執行完後,b=3。先給b賦值,再自增。
int c
注意: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);
運算子優先順序的問題
|
. ( ) { } ; , |
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 |
&& |