邏輯運算子(Logical
Operators)
邏輯運算子包含and( &)、or( | )、not( ! ),運算結果如下表:
a
|
b
|
a&b
|
a | b
|
!a
|
True
|
True
|
True
|
True
|
False
|
True
|
False
|
False
|
True
|
False
|
False
|
True
|
False
|
True
|
True
|
False
|
False
|
False
|
False
|
True
|
class Logical1 {
public
static void main (String[] args) {
System.out.println("(false&true)運算結果 = " + (false&true));
System.out.println("(true|false)運算結果 = "+ (true|false));
System.out.println("(!true)運算結果 = "+ (!true));
}
}
執行結果:C:\js>java Logical1
(false&true)運算結果 = false
(true|false)運算結果 = true
(!true)運算結果 = false
短路邏輯運算子使用2個邏輯運算子符號,短路and(&&)及短路or( | | )。
and(&&):第一個運算值為false時,已注定邏輯運算結果為false,將不必繼續執行第二個運算值。
or( | | ):第一個運算值為true時,已注定邏輯運算結果為true,將不必繼續執行第二個運算值。
class Short10 {
public
static void main (String[] args) {
int in1
= 3;
System.out.println("測試 (true && (++in1 > 0)) = "+ (true
&& (++in1 > 0)));
System.out.println("測試是否有執行 ++ in1: "+ in1);
// (++in1>0)要執行,in1=3+1=4
in1 = 3;
System.out.println("測試 (false && (++in1 > 0)) = "+
(false && (++in1 > 0)));
System.out.println("測試是否有執行 ++ in1: "+ in1);
// (++in1>0)不用執行,in1=3
in1 = 3;
System.out.println("測試 (true || (++in1 > 0)) = "+ (true || (++in1>
0)));
System.out.println("測試是否有執行 ++ in1: "+ in1);
// (++in1>0)不用執行,in1=3
in1 = 3;
System.out.println("測試 (false || (++in1 > 0)) = "+ (false || (++in1
> 0)));
System.out.println("測試是否有執行 ++ in1: "+ in1);
// (++in1>0)要執行,in1=3+1=4
}
}
執行結果:C:\js>java Short10
測試 (true && (++in1 > 0)) = true
測試是否有執行 ++ in1: 4
測試 (false && (++in1 > 0)) = false
測試是否有執行 ++ in1: 3
測試 (true || (++in1 > 0)) = true
測試是否有執行 ++ in1: 3
測試 (false || (++in1 > 0)) = true
測試是否有執行 ++ in1: 4
if-else三元運算子
if-else三元運算子是沒有if-else的運算子。
格式:
boolean-exp? exp1 or value1:exp2 or value2
Boolean-exp為真時,值為執行exp1結果或為value1,Boolean-exp為假時,值為執行exp2結果或為value12。使用if-else三元運算子程式較簡潔,但不易懂。如使用後述if-else述句,則較容易懂,程式碼是多了些。
class Ternary3{
public
static void main (String[] args) {
int x =
5;
// if-else 三元運算 x > 10 ? x + 20 : x+30
System.out.println("1. x > 10 ? x + 20 : x+30結果為" +( x > 10 ? x + 20 :
x+30));
System.out.println("2. x > 3 ? 100 : 200結果為" +( x > 3 ? 100 : 200));
// if-else述句x > 10 ? x + 20 : x+30
if (x
> 10)
System.out.println("3. x > 10結果為" +( x + 20));
else
System.out.println("4. x > 10結果為" +( x + 30));
}
}
執行結果:C:\js>java Ternary3
1. x > 10 ? x + 20 : x+30結果為35
2. x > 3 ? 100 : 200結果為100
4. x > 10結果為35
轉型運算子(Casting
Operators)
轉型運算子即前述的資料型別轉換的強迫轉型。
基本型別除boolean型別外皆能強迫轉型。
class型別不允許轉型,String是個特例,但同一classes的物件之間可以轉型,以後會有說明。
其他的運算子
其他運算子尚包含位元運算子(Bitwise Operators)、位移運算子(Shift Bitwise Operators)、補數運算子(Complement Bitwise Operators)等,因較不常使用,待後續有機會再行補足。
