java三元運算符

由?:符號表示的,具體的含義其實就和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]

相關文章
相關標籤/搜索