最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java不定參數(shù)使用及一些注意情況

 更新時間:2024年03月04日 11:22:42   作者:赫蘿的紅蘋果  
不定參數(shù)是一種特殊的參數(shù)類型,它允許方法接受可變數(shù)量的參數(shù),本文主要介紹了Java不定參數(shù)使用及一些注意情況,具有一定的參考價值,感興趣的可以了解一下

一、背景

在項目中使用到了StringUtils.isAllBlack(String …css)方法??梢院芊奖愕貍鬟f不定數(shù)量的參數(shù)進(jìn)行空判。
但開發(fā)過程中遇到了一些問題,所以特地記錄一下。

二、不定參數(shù)傳參

不定參數(shù)的傳參本質(zhì)上是一個泛型的數(shù)組。參數(shù)數(shù)量大于等于兩個的時候,系統(tǒng)會把傳入的參數(shù)都放到一個對應(yīng)類型的數(shù)組里面。
但傳單個參數(shù)的時候存在一些需要注意的情況,不注意可能會出現(xiàn)空指針異常。

2.1、通過引用傳單個null

public class Test {
	public static void test1(Object... css) {
		System.out.println(css);
		for (Object o : css) {
			System.out.println(o);//null
		}
	}
	public static void main(String[] args) {
		String s=null;
		test1(s);
	}
}

上述代碼運行結(jié)果是輸出:null
程序把傳入的null當(dāng)成一個元素放到了參數(shù)數(shù)組里面。

在這里插入圖片描述

2.2、直接傳單個null

public class Test {
	public static void test1(Object... css) {
		System.out.println(css);//null
		for (Object o : css) {//NullPointException
			System.out.println(o);
		}
	}
	public static void main(String[] args) {
		test1(null);
	}
}

上述代碼并沒有把直接傳的null當(dāng)成參數(shù)數(shù)組的一個元素,而是直接讓參數(shù)數(shù)組為null。因為沒有明確告訴程序這個null是什么類型的,系統(tǒng)直接把null的類型轉(zhuǎn)換成不定參數(shù)對應(yīng)的Object[]類型。因此css為空。

在這里插入圖片描述

2.3、驗證直接傳null的默認(rèn)效果

public class Test {
	public static void test1(Object... css) {
		System.out.println(css);
		for (Object o : css) {
			System.out.println(o);
		}
	}
	public static void main(String[] args) {
		test1((Object[]) null);
	}
}

上述代碼的運行結(jié)果和直接傳單個null一樣,符合預(yù)期。

在這里插入圖片描述

2.4、直接傳單個null(加類型強轉(zhuǎn))

public class Test {
	public static void test1(Object... css) {
		System.out.println(css);
		for (Object o : css) {
			System.out.println(o);
		}
	}
	public static void main(String[] args) {
		test1((Object) null);
	}
}

上述代碼,因為強轉(zhuǎn)告訴系統(tǒng)參數(shù)的數(shù)據(jù)類型,系統(tǒng)又把null當(dāng)成了參數(shù)數(shù)組里面的一個元素來處理。這里的類型強轉(zhuǎn)和2.1、的傳參方式本質(zhì)上是一樣的。

在這里插入圖片描述

2.5、注意

直接傳單個null的時候效果相當(dāng)于傳(T[]) null,css會為空。

三、StringUtils.isAnyBlank(String …css)注釋

StringUtils.isAnyBlank((String) null)    = true
StringUtils.isAnyBlank((String[]) null)  = false
StringUtils.isAnyBlank(null, "foo")      = true
StringUtils.isAnyBlank(null, null)       = true
StringUtils.isAnyBlank("", "bar")        = true
StringUtils.isAnyBlank("bob", "")        = true
StringUtils.isAnyBlank("  bob  ", null)  = true
StringUtils.isAnyBlank(" ", "bar")       = true
StringUtils.isAnyBlank(new String[] {})  = false
StringUtils.isAnyBlank(new String[]{""}) = true
StringUtils.isAnyBlank("foo", "bar")     = false

一個一個解釋上面的調(diào)用方式,在org.apache.commons.lang3.StringUtils中。
首先,這個方法是用來判斷傳入的參數(shù)是否存在為空或空串。
第一個,相當(dāng)于傳入了一個null放在參數(shù)數(shù)組里面,有一個元素,并且為null,因此為真。
第二個,默認(rèn)類型為String[],相當(dāng)于css為空,也就是參數(shù)數(shù)組為空,相當(dāng)于沒有傳入元素,沒有傳入?yún)?shù)也就不會有參數(shù)為空,因此為假。和StringUtils.isAnyBlank(null)效果一樣第三個,傳入了兩個參數(shù),第一個為null,因此為真。
第四個,傳入兩個null,多個參數(shù)情況下,默認(rèn)類型是String,兩個null,因此為真。
第五個,第一個參數(shù)傳入空串,因此為真。
第六個,第二個參數(shù)傳入空串,因此為真。
第七個,第二個參數(shù)傳入null,因此為真。
第八個,第一個參數(shù)傳入空格,空格也在black的判斷里面,因此為真。
第九個,傳入一個容量為0的空字符串?dāng)?shù)組,因為里面沒有元素,也就沒有元素為空或空串,因此為假。
第十個,傳入一個數(shù)組,里面有一個空串,因此為真。
第十一個,傳入兩個字符串,都不為空或空串,因此為假。
再加一種情況,傳入一個容量不為0的空字符串?dāng)?shù)組,因為數(shù)組里面默認(rèn)填充null,因此為真。

重點需要考慮的就是不同查找時候,對于參數(shù)數(shù)組為null的情況的處理。
總的來說可以這樣理解:存在xxx,就看元素是否存在xxx,存在就為真,不存在就為假(參數(shù)數(shù)組都為null的情況當(dāng)然是不存在)。全部xxx,就查詢元素是否存在反xxx,存在就為假,不存在就為真(參數(shù)數(shù)組都為null的情況當(dāng)然是不存在)。也正是因為如此,存在和全部這兩種判斷在遇到參數(shù)數(shù)組為空的時候判斷結(jié)果才完全相反。

到此這篇關(guān)于Java不定參數(shù)使用及一些注意情況的文章就介紹到這了,更多相關(guān)Java不定參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用SpringBoot實現(xiàn)微服務(wù)超時重試模式的示例

    使用SpringBoot實現(xiàn)微服務(wù)超時重試模式的示例

    這篇文章主要介紹了使用SpringBoot實現(xiàn)微服務(wù)超時重試模式的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • JDK源碼白話解讀之ThreadLocal篇

    JDK源碼白話解讀之ThreadLocal篇

    其實網(wǎng)上有很多關(guān)于ThreadLocal的文章了,有不少文章也已經(jīng)寫的非常好了。但是很多同學(xué)反應(yīng)還有一些部分沒有講解的十分清楚,還是有一定的疑惑沒有想的十分清楚
    2022-02-02
  • Netty分布式ByteBuf使用命中緩存的分配解析

    Netty分布式ByteBuf使用命中緩存的分配解析

    這篇文章主要為大家介紹了Netty分布式ByteBuf?使用命中緩存的分配解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • java中join方法的理解與說明詳解

    java中join方法的理解與說明詳解

    這篇文章主要給大家介紹了關(guān)于java中join方法的理解與說明的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java設(shè)計模式筆記之代理模式

    java設(shè)計模式筆記之代理模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式之代理模式筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • IDEA版最新MyBatis程序配置教程詳解

    IDEA版最新MyBatis程序配置教程詳解

    這篇文章主要介紹了IDEA版最新MyBatis程序配置教程詳解,需要的朋友可以參考下
    2020-07-07
  • 深入IDEA Debug問題透析詳解

    深入IDEA Debug問題透析詳解

    這篇文章主要為大家介紹了深入IDEA Debug問題透析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • java的Builder原理和實現(xiàn)詳解

    java的Builder原理和實現(xiàn)詳解

    大家好,本篇文章主要講的是java的Builder原理和實現(xiàn)詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 基于Java中對域和靜態(tài)方法的訪問不具有多態(tài)性(實例講解)

    基于Java中對域和靜態(tài)方法的訪問不具有多態(tài)性(實例講解)

    下面小編就為大家?guī)硪黄贘ava中對域和靜態(tài)方法的訪問不具有多態(tài)性(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗詳解

    Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗詳解

    這篇文章主要介紹了Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論

罗平县| 灵山县| 栾川县| 镇雄县| 花莲县| 彰武县| 多伦县| 宽城| 甘洛县| 双桥区| 德庆县| 安吉县| 甘南县| 易门县| 安庆市| 和林格尔县| 石林| 崇左市| 汾西县| 义马市| 秦安县| 神农架林区| 柘荣县| 平罗县| 新宁县| 子洲县| 即墨市| 彰化县| 西华县| 宁南县| 博客| 庐江县| 育儿| 阳曲县| 玉山县| 万宁市| 镇康县| 阿合奇县| 弋阳县| 江门市| 和平县|