10 運算關係式Expression(2)
[10-1邏輯運算]
用於邏輯運算的邏輯運算子(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
真正有意義之邏輯運算實例,須待緊接著發表的「流程控制」章節中再一併說明。
[10-2短路邏輯運算]
短路邏輯運算顧名思義即是走捷徑的意思,當前面部分的運算已知整體結果時,就可略掉後面的運算,此時必須使用不同於一般邏輯運算的運算符號,也就是明示要採取短路運算,否則仍然會進行後面部分的運算。又因為如此,如果後面部分的運算是有意義的話,就不可採取短路運算。短路邏輯運算子(Short Circuit Logical Operators)使用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);
/*參照前述邏輯運算表格,因第一個值為true,須進行第二個運算式(++in1>0)才能決定整個運算式的結果為true或false,如(++in1>0)為true,整個運算式結果為true,如(++in1>0)為false,整個運算式結果為false。結果in1=4
*/
in1 = 3;
System.out.println("測試 (false && (++in1 > 0)) = "+
(false && (++in1 > 0)));
System.out.println("測試是否有執行 ++ in1: "+ in1);
/*因第一個運算值false已決定整個運算式的值為false,故不用執行(++in1>0),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
真正有意義之短路邏輯運算實例,須待緊接著發表的「流程控制」章節中再一併說明。
[10-3 if-else三元運算]
if-else三元運算是沒有if-else的運算。
格式:
boolean-exp? exp1 or value1:exp2 or value2
Boolean-exp為真時,值為執行exp1結果或為value1,Boolean-exp為假時,值為執行exp2結果或為value2。使用if-else三元運算子程式較簡潔,但不易懂。如使用後述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));
// 將x > 10 ? x + 20 : x+30轉換為if-else述句
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
[10-4轉型運算]子(Casting Operators)
轉型運算即前述的資料型別轉換的強迫轉型。轉型運算子(Casting Operators)使用下述方式:
(轉型目標型別)欄位或稱變數;
基本型別除boolean型別外皆能強迫轉型。
class型別不允許轉型,String是個特例,但同一族系classes的物件之間可以轉型,以後會有說明。
[10-5其他的運算]
其他運算尚包含使用位元運算子(Bitwise Operators)的位元運算、使用位移運算子(Shift Bitwise Operators)的位移運算、使用補數運算子(Complement Bitwise Operators)的補數運算等,因較不常使用,待後續有機會再行補足。
留言列表