亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java三目運(yùn)算符的實(shí)戰(zhàn)案例

 更新時(shí)間:2022年09月02日 10:21:35   作者:大?以?巴?狼  
三目運(yùn)算符在java中運(yùn)用可以說(shuō)非常的廣泛,下面這篇文章主要給大家介紹了關(guān)于Java三目運(yùn)算符的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

1.什么是條件分支語(yǔ)句?條件分支語(yǔ)句共有幾種寫(xiě)法?

條件分支語(yǔ)句就是根據(jù)條件不同,選擇執(zhí)行不同代碼的結(jié)構(gòu),Java中共有三種聲明條件分支語(yǔ)句的語(yǔ)法,分別為:

  • if 語(yǔ)句
  • 三目運(yùn)算符
  • switch語(yǔ)句

案例:判斷輸入的數(shù)值是奇數(shù)還是偶數(shù),if 語(yǔ)句非常簡(jiǎn)單:

        System.out.println("請(qǐng)輸入一個(gè)數(shù)字:");
        int num = sc.nextInt();
        //輸出用戶(hù)輸入的數(shù)據(jù)是奇數(shù)還是偶數(shù)?
        //分析:通過(guò)條件分支語(yǔ)句進(jìn)行判斷!
        if (num % 2 == 0) {//證明:數(shù)值除以二等于0,是偶數(shù)
            System.out.println("偶數(shù)");
        } else {//證明:除以2不等于0,是奇數(shù)
            System.out.println("奇數(shù)");
        }

2. 三目元算符又稱(chēng)為三元運(yùn)算符也稱(chēng)為條件運(yùn)算符,目的就是根據(jù)條件得到數(shù)據(jù)結(jié)果,語(yǔ)法結(jié)構(gòu):

判斷條件 ?條件成立結(jié)果 :條件不成立結(jié)果

需要注意的是,三目運(yùn)算符得到的是數(shù)據(jù)結(jié)果,不是代碼表達(dá)式 。

  • 優(yōu)勢(shì):判斷兩種分支的代碼非常簡(jiǎn)單
  • 劣勢(shì):不太適用于判斷多中分支(可以用來(lái)判斷,需要通過(guò)三目元算符嵌套完成?。?/li>
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請(qǐng)輸入一個(gè)數(shù)字:");
        int num = sc.nextInt();
        //輸出用戶(hù)輸入的數(shù)據(jù)是奇數(shù)還是偶數(shù)?
        //分析:num對(duì)2取余是否等于0 ? (如果條件成立)輸出偶數(shù) :(如果不成立)輸出奇數(shù)
        System.out.println(num % 2 == 0 ? "偶數(shù)" : "奇數(shù)");
    }

如果遇到判斷三個(gè)數(shù)值大小,或者4個(gè)數(shù)值大小時(shí)候,就會(huì)非常麻煩

        Scanner sc = new Scanner(System.in);
        System.out.println("請(qǐng)輸入第1個(gè)整數(shù):");
        int a = sc.nextInt();
        System.out.println("請(qǐng)輸入第2個(gè)整數(shù):");
        int b = sc.nextInt();
        System.out.println("請(qǐng)輸入第3個(gè)整數(shù):");
        int c = sc.nextInt();
        System.out.println("請(qǐng)輸入第4個(gè)整數(shù):");
        int d = sc.nextInt();
        //輸出三個(gè)變量的最大值!(三目運(yùn)算符)
        //a > b ? a : b等價(jià)于求得了a和b中的最大值!
        System.out.println((a > b ? a : b) > c ? (a > b ? a : b) : c);
        System.out.println(a > b ? (a > c ? a : c) : (b > c ? b : c));
 
        //輸出四個(gè)變量的最大值!
        System.out.println(a > b ? (a > c ? (a > d ? a : d) : (c > d ? c : d)) : (b > c ? (b > d ? b : d) : (c > d ? c : d)));

3. switch語(yǔ)句的語(yǔ)法結(jié)構(gòu)如下:

switch (變量) {
        case 值1: 
            滿(mǎn)足變量等于值1運(yùn)行的代碼;
            break;
        case 值2: 
            滿(mǎn)足變量等于值2運(yùn)行的代碼;
            break;
        case 值3: 
            滿(mǎn)足變量等于值3運(yùn)行的代碼;
            break;
        default:
            不滿(mǎn)足以上任何情況運(yùn)行的代碼;
            break;
    }

break用在switch語(yǔ)句中表示結(jié)束當(dāng)前switch語(yǔ)句的執(zhí)行,如果省略break,那么switch語(yǔ)句會(huì)跳過(guò)后續(xù)所有判斷繼續(xù)執(zhí)行,直到遇到break或者switch運(yùn)行結(jié)束為止!

  • 優(yōu)勢(shì):適用于判斷一個(gè)數(shù)的多種分支的情況
  • 劣勢(shì):switch只能判斷相等的情況
        /*
        周一:上班
        周二:上班
        周三:出差
        周四:上班
        周五:上班
        周六:睡覺(jué)
        周日:打球
        否則:日期有誤
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("請(qǐng)輸入今天周幾?");
        int week = sc.nextInt();
        //根據(jù)周幾輸出不同的內(nèi)容(switch語(yǔ)句)
        switch (week) {
            case 1:
            case 2://當(dāng)前一個(gè)判斷句沒(méi)有break時(shí),運(yùn)行不會(huì)終止,(case=1245都會(huì)輸出上班)
            case 4:
            case 5:
                System.out.println("上班");
                break;
            case 3:
                System.out.println("出差");
                break;
            case 6:
                System.out.println("睡覺(jué)");
                break;
            case 7:
                System.out.println("打球");
                break;
            default:
                System.out.println("日期有誤");
                break;
        }

補(bǔ)充:Java 三目運(yùn)算符細(xì)節(jié)詳解

短路問(wèn)題

首先我們都知道Java中 && 和 || 的運(yùn)算是具有短路效果的,如果邏輯運(yùn)算符的第一部分能確定運(yùn)算的結(jié)果,就不會(huì)再去計(jì)算邏輯運(yùn)算符的第二部分,比如下面的代碼,輸出的 i 仍然是1,因?yàn)楹竺娴倪\(yùn)算短路了,沒(méi)有計(jì)算。

int i = 1;
if (true || (i++) > 5) {
   System.out.println("test");
}
System.out.println(i);   // 1

回到三目運(yùn)算符,三目運(yùn)算符也會(huì)有短路效果嗎?看下面的代碼。

int i = 5;
int j = true ? 1 : ++i;
System.out.println(i);  // 5

結(jié)果輸出是 5 ,說(shuō)明三目運(yùn)算符也有類(lèi)似邏輯運(yùn)算符的短路問(wèn)題,直接去 true 和 false 對(duì)應(yīng)的地方取結(jié)果,不會(huì)計(jì)算另一部分,即使把代碼寫(xiě)成下面這樣結(jié)果一樣,輸出結(jié)果還是 5 ,不會(huì)因?yàn)轫樞蚨淖儭?/p>

int i = 5;
int j = false ? ++i : 1;
System.out.println(i);  // 5

運(yùn)算順序問(wèn)題

先看下面的代碼。

int[] array = new int[5];
int i = 4;
boolean flag = i++ > 4 ?  true : false;
System.out.println(flag);          // false
i = 4;
int b = i++ > 3 ?  array[i] : array[i];

我們知道 i++ 是先賦值再進(jìn)行自加,所以 flag 的結(jié)果是 false 很好理解,但是下面 b 的結(jié)果會(huì)是多少呢?直接看運(yùn)行結(jié)果。

false
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
        at A.main(A.java:16)

結(jié)果是拋出數(shù)組越界異常,結(jié)果說(shuō)明在比較結(jié)束的時(shí)候,i 的值已經(jīng)加了,即此時(shí) i = 5 ,再去取數(shù)組的值的時(shí)候就會(huì)拋出數(shù)組越界異常,所以千萬(wàn)不要認(rèn)為 i 值在整個(gè)表達(dá)式結(jié)束后才會(huì)增加。

包裝類(lèi)問(wèn)題

在使用三目運(yùn)算符處理包裝類(lèi)時(shí),要注意 NPE 問(wèn)題,看下面的代碼。

int a = 5;
Integer b = null;

int c = true ? a : b;
System.out.println(c); ? ?// 5

在這個(gè)例子中,會(huì)輸出 5 ,沒(méi)有什么問(wèn)題,但是把代碼稍微變一點(diǎn),看下面的代碼。

int a = 5;
Integer b = null;

int c = true ? b : a;
System.out.println(c);

僅僅是將 a 和 b 交換了一下位置,運(yùn)行就會(huì)報(bào) NullPointerException ,這是為什么的。這也很好理解,當(dāng)為 true 時(shí),會(huì)選 b ,因?yàn)榍懊?c 是基本數(shù)據(jù)類(lèi)型,所以這時(shí)包裝類(lèi)會(huì)自動(dòng)拆箱,變成下面這樣的代碼,而 b 是 null ,所以會(huì)拋出 NullPointerException 異常。

int a = 5;
Integer b = null;

int c = true ? b.intValue() : a;
System.out.println(c);

但是,將代碼變成下面這樣,按理說(shuō)應(yīng)該不會(huì)有什么問(wèn)題,因?yàn)?c 是包裝類(lèi)型,可以接收 null ,但是運(yùn)行時(shí)還是會(huì)發(fā)生 NullPointerException 異常。其實(shí),當(dāng)三目運(yùn)算符的第二、第三個(gè)操作數(shù)分別為基本類(lèi)型的包裝類(lèi)和基本數(shù)據(jù)類(lèi)型時(shí),并且選擇了包裝類(lèi)那一項(xiàng),則包裝類(lèi)會(huì)自動(dòng)進(jìn)行拆箱操作。即代碼還是會(huì)進(jìn)行拆箱操作,所以會(huì)發(fā)生 NullPointerException 異常,這點(diǎn)非常容易使人弄錯(cuò)。

int a = 5;
Integer b = null;

Integer c = true ? b : a;
// 還是會(huì)變成Integer c = true ? b.intValue() : a;
System.out.println(c);

總結(jié)

到此這篇關(guān)于Java三目運(yùn)算符的文章就介紹到這了,更多相關(guān)Java三目運(yùn)算符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot限制文件或圖片上傳大小的兩種配置方法

    SpringBoot限制文件或圖片上傳大小的兩種配置方法

    這篇文章主要介紹了SpringBoot限制文件或圖片上傳大小的兩種配置方法,一種是配置在啟動(dòng)類(lèi)中,一種是配置在application.yml或者application.properties中,需要的朋友可以參考下
    2018-03-03
  • Java 多線程的同步代碼塊詳解

    Java 多線程的同步代碼塊詳解

    這篇文章主要介紹了Java 多線程的同步代碼塊,使用synchronized關(guān)鍵字創(chuàng)建線程同步方法是實(shí)現(xiàn)線程同步的關(guān)鍵,需要的朋友可以參考下
    2021-10-10
  • Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼

    Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼

    下面小編就為大家?guī)?lái)一篇Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Java文件上傳下載、郵件收發(fā)實(shí)例代碼

    Java文件上傳下載、郵件收發(fā)實(shí)例代碼

    這篇文章主要介紹了Java文件上傳下載、郵件收發(fā)實(shí)例代碼的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • java之lombok的構(gòu)建者模式Builder中的泛型寫(xiě)法說(shuō)明

    java之lombok的構(gòu)建者模式Builder中的泛型寫(xiě)法說(shuō)明

    這篇文章主要介紹了java之lombok的構(gòu)建者模式Builder中的泛型寫(xiě)法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • SpringBoot整合Activiti工作流框架的使用

    SpringBoot整合Activiti工作流框架的使用

    本文主要介紹了SpringBoot整合Activiti工作流框架的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Spring Boot實(shí)戰(zhàn)教程之自動(dòng)配置詳解

    Spring Boot實(shí)戰(zhàn)教程之自動(dòng)配置詳解

    Spring Boot的自動(dòng)配置給開(kāi)發(fā)者帶來(lái)了很大的便利,當(dāng)開(kāi)發(fā)人員在pom文件中添加starter依賴(lài)后,maven或者gradle會(huì)自動(dòng)下載很多jar包到classpath中。下面這篇文章主要給大家介紹了關(guān)于Spring Boot自動(dòng)配置的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-07-07
  • 在spring boot中使用java線程池ExecutorService的講解

    在spring boot中使用java線程池ExecutorService的講解

    今天小編就為大家分享一篇關(guān)于在spring boot中使用java線程池ExecutorService的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • 貨拉拉大數(shù)據(jù)對(duì)BitMap的探索實(shí)踐詳解

    貨拉拉大數(shù)據(jù)對(duì)BitMap的探索實(shí)踐詳解

    這篇文章主要為大家介紹了貨拉拉大數(shù)據(jù)對(duì)BitMap的探索實(shí)踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • springBoot連接遠(yuǎn)程Redis連接失敗的問(wèn)題解決

    springBoot連接遠(yuǎn)程Redis連接失敗的問(wèn)題解決

    本文主要介紹了springBoot連接遠(yuǎn)程Redis連接失敗的問(wèn)題解決,使用springboot里面的redisTemplate進(jìn)行連接的時(shí)候,卻發(fā)生了報(bào)錯(cuò),下面就來(lái)一起解決一下
    2024-05-05

最新評(píng)論