由?:符號表示的,具體的含義其實就和if-else結構的含義差很少,這種運算符會將某個條件做兩種處理,若是知足條件的話就執行第一個結果,若是不知足的話就執行另一個結果,例如:
Int A,B,C;
A=2;
B=3;
C=A>B ? 100 :200;
這條語句的意思是,若是A>B的話,就將100賦給C,不然就將200賦給C;java
1、比較運算符oracle
又叫關係運算符,用於判斷兩個被操做數的大小及是否相等的關係。使用比較運算符其返回結果必定爲布爾值。學習
運算符ui |
運算規則spa |
範例code |
結果blog |
==接口 |
相等於get |
4==3數學 |
false |
!= |
不等於 |
4!=3 |
true |
< |
小於 |
4<3 |
false |
> |
大於 |
4>3 |
true |
<= |
小於等於 |
4<=3 |
false |
>= |
大於等於 |
4>=3 |
true |
2、邏輯運算符
用於計算兩個布爾值通過指定邏輯後的運算結果,每一個邏輯運算符都是一種邏輯運算規則。邏輯是在中學數學中學習的概念,是判斷是非關係的運算。因此邏輯運算符操做的均爲布爾值:true與false
運算符 |
運算規則 |
範例 |
結果 |
& |
與 |
false&true |
false |
| |
或 |
false|true |
true |
^ |
異或 |
true^flase |
true |
! |
非 |
!true |
flase |
&& |
短路與 |
false&&true |
false |
|| |
短路或 |
false||true |
true |
邏輯運算符一般鏈接兩個其餘表達式計算後的布爾值結果
&&和&以及||和|的區別:當使用短路與或者短路或時,只要能判斷出結果則後邊的部分就再也不判斷。
3、三元運算符
用來完成簡單的選擇邏輯,即根據條件判斷,從兩個選擇中選擇一種執行。
使用格式:
(條件表達式)?表達式1:表達式2;
運算規則:
a) 判斷條件表達式,結果爲一個布爾值。
b) true,運算結果爲表達式1
c) false,運算結果爲表達式2
如:
int a = 10; int b = 20;
a==b?10:20; 結果爲20
首先看一下三元運算符的格式
[條件語句] ? [表達式1] : [表達式2]
其中如條件語句爲真執行表達式1,不然執行表達式2.簡單的例子就不舉了,來點其它的。在JDK1.5之前的版本中,表達式1和表達式2都要求是相同的類型,好比都是String或者char之類的,在JDK1.5之後,有了自動拆箱和裝箱的緣由,二者只要其中一種或者二者都能被拆箱便可,好比表達式1爲Integer,而表達式2爲int類型的,好比以下
1 int a = 1; 2 Integer b = 2; 3 boolean c = ture; 4 int d = c ? b : a;
還有個須要注意的是,若是表達式1和表達式2的類型不相同,那麼他們須要對交集類型的自動參考轉換。例如以下這段代碼
1 String str = "abc"; 2 StringBuilder strbu = new StringBuilder("def"); 3 boolean boo = true; 4 CharSequence cs = boo ? str : strbu;
由於String和StringBuilder都實現了CharSequence這個接口。
肯定條件表達式結果類型的規則的核心是如下3點:
1 若是表達式1和表達式2操做數具備相同的類型,那麼它就是條件表達式的類型。
2 若是一個表達式的類型是byte、short、char類型的,而另一個是int類型的常量表達式,且它的值能夠用類型byte、short、char三者之一表示的,那麼條件表達式的類型就是三者之一
3 不然,將對操做數類型進行二進制數字提高,而條件表達式的類型就是第二個和第三個操做數被提高以後的類型
以上的三點能夠用以下的代碼來幫助理解:
1 char ch = 'a'; 2 int num = 0 ; 3 boolean bool = true; 4 System.out.print( bool ? ch : 0); //這裏不是 bool ? ch : num ,那樣會打印兩個97 5 System.out.print( !bool ? num : ch);
這段代碼打印的是 a97 。很顯然,第二點的規則應用到第一個打印上了,返回的是char,第三點的規則應用到第二個打印上了,返回的是int 。可是誰會在意這個順序致使的打印結果,因此爲了不沒必要要的麻煩,很顯然顯式強制類型轉換是個很不錯的選擇 -_-
1 char ch = 'a'; 2 int num = 0 ; 3 boolean bool = true; 4 System.out.print( bool ? (char)ch : (char)0); 5 System.out.print( !bool ? (int)num : (int)ch);
還有值得注意的是 表達式1 和 表達式2 不必定非得是數據類型,還能夠是本身定義的方法,只要方法有返回值就行。例如
1 static int test1(int i) { 2 i += 1; 3 return i; 4 5 } 6 7 static int test2(int i) { 8 i += 2; 9 return i; 10 } 11 12 public static void ternary() { 13 boolean boo = false; 14 int c = boo ? test1(1) : test2(2); 15 }
以上就是我的的一點當心得~~有些內容能夠參考條件表達式規範[JLS 15.25]