三元運算符要點及實用案例

使用格式:

(條件表達式)?表達式1:表達式2;
運算規則:
a) 判斷條件表達式,結果爲一個布爾值。
b) true,運算結果爲表達式1
c) false,運算結果爲表達式2

由?:符號表示的,具體的含義其實就和if-else結構的含義差不多,這種運算符會將某個條件作兩種處理,如果滿足條件的話就執行第一個結果,如果不滿足的話就執行另外一個結果,例如:
1:
Int A,B,C;
A=2;
B=3;
C=A>B ? 100 :200;
這條語句的意思是,如果A>B的話,就將100賦給C,否則就將200賦給C。
2:
int a = 10; int b = 20;
a==b?10:20; 結果爲20

在JDK1.5以前的版本中,表達式1和表達式2都要求是相同的類型,比如都是String或者char之類的,在JDK1.5以後,有了自動拆箱和裝箱的原因,兩者只要其中一種或者兩者都能被拆箱即可,如果表達式1和表達式2的類型不相同,那麼他們需要對交集類型的自動參考轉換。

因爲String和StringBuilder都實現了CharSequence這個接口。

確定條件表達式結果類型的規則的核心是以下3點:
  1 如果表達式1和表達式2操作數具有相同的類型,那麼它就是條件表達式的類型。
  2 如果一個表達式的類型是byte、short、char類型的,而另外一個是int類型的常量表達式,且它的值可以用類型byte、short、char三者之一表示的,那麼條件表達式的類型就是三者之一
  3 否則,將對操作數類型進行二進制數字提升,而條件表達式的類型就是第二個和第三個操作數被提升之後的類型。
  值得注意的是:表達式1 和 表達式2 不一定非得是數據類型,還可以是自己定義的方法,只要方法有返回值就行。
  例如:

static int test1(int i) {
        i += 1;
        return i;
    }
    static int test2(int i) {
        i += 2;
        return i;
    }
    public static void ternary() {
        boolean boo = false;
        int c = boo ? test1(1) : test2(2);
    }

案例:使用三元運算符完成月份的判斷


import java.util.*;
//import java.util.*;
import java.io.*;//導包


public class JiJieGaiJin{
    public static void main(String args[]){
        while(true){
        /*    Scanner read=new Scanner(System.in);
        //String str="請輸入月份";
        sop("請輸入月份");
        int x=read.nextInt();*/
        panduan();
        //sop(x);
    }
    }
    public static void panduan(){
        Scanner read=new Scanner(System.in);
        //String str="請輸入月份";
        sop("請輸入月份");
        int x=read.nextInt();
        String str=null;
        str= (x<1|x>12)?"您的輸入有誤,月份不存在":(x<3|x>11)?"冬天??":x<6?"春天??":x<9?"夏天??":"秋天??";
        sop("您輸入的月份是:"+x);
        sop(str);
    }   
    public static void sop(Object obj){
        
        System.out.println(obj);
         
    }
}

運行結果如下圖所示:
在這裏插入圖片描述
注意:三元運算符的語句不能爲下x<3|x=4,否則會報錯,因爲前者爲bool類型,後者爲int類型
小細節,二元運算符1<x<3,此種用法是錯誤的。在三元運算語句中應寫爲x>1&x<3。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章