欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、背景

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

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

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

2.1、通過引用傳單個(gè)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);
	}
}

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

在這里插入圖片描述

2.2、直接傳單個(gè)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ù)組的一個(gè)元素,而是直接讓參數(shù)數(shù)組為null。因?yàn)闆]有明確告訴程序這個(gè)null是什么類型的,系統(tǒng)直接把null的類型轉(zhuǎn)換成不定參數(shù)對(duì)應(yīng)的Object[]類型。因此css為空。

在這里插入圖片描述

2.3、驗(yàn)證直接傳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);
	}
}

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

在這里插入圖片描述

2.4、直接傳單個(gè)null(加類型強(qiáng)轉(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);
	}
}

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

在這里插入圖片描述

2.5、注意

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

三、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

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

重點(diǎn)需要考慮的就是不同查找時(shí)候,對(duì)于參數(shù)數(shù)組為null的情況的處理。
總的來說可以這樣理解:存在xxx,就看元素是否存在xxx,存在就為真,不存在就為假(參數(shù)數(shù)組都為null的情況當(dāng)然是不存在)。全部xxx,就查詢?cè)厥欠翊嬖诜磝xx,存在就為假,不存在就為真(參數(shù)數(shù)組都為null的情況當(dāng)然是不存在)。也正是因?yàn)槿绱?,存在和全部這兩種判斷在遇到參數(shù)數(shù)組為空的時(shí)候判斷結(jié)果才完全相反。

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

相關(guān)文章

  • Java調(diào)用Pytorch模型實(shí)現(xiàn)圖像識(shí)別

    Java調(diào)用Pytorch模型實(shí)現(xiàn)圖像識(shí)別

    這篇文章主要為大家詳細(xì)介紹了Java如何調(diào)用Pytorch實(shí)現(xiàn)圖像識(shí)別功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06
  • 如何利用泛型封裝通用的service層

    如何利用泛型封裝通用的service層

    這篇文章主要介紹了如何利用泛型封裝通用的service層,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

    Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

    這篇文章主要介紹了SpringMVC 異常處理SimpleMappingExceptionResolver類詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 詳解java關(guān)于對(duì)象的比較

    詳解java關(guān)于對(duì)象的比較

    這篇文章主要為大家介紹了java關(guān)于對(duì)象的比較,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java中SimpleDateFormat日期格式轉(zhuǎn)換詳解及代碼示例

    Java中SimpleDateFormat日期格式轉(zhuǎn)換詳解及代碼示例

    這篇文章主要介紹了Java中SimpleDateFormat日期格式轉(zhuǎn)換詳解及代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 使用Java實(shí)現(xiàn)對(duì)兩個(gè)秒級(jí)時(shí)間戳相加

    使用Java實(shí)現(xiàn)對(duì)兩個(gè)秒級(jí)時(shí)間戳相加

    在現(xiàn)代應(yīng)用程序開發(fā)中,時(shí)間戳的處理是一個(gè)常見需求,特別是當(dāng)我們需要對(duì)時(shí)間戳進(jìn)行運(yùn)算時(shí),比如時(shí)間戳的相加操作,本文我們將探討如何使用Java對(duì)兩個(gè)秒級(jí)時(shí)間戳進(jìn)行相加,并展示詳細(xì)的代碼示例和運(yùn)行結(jié)果,需要的朋友可以參考下
    2024-08-08
  • Java后端實(shí)現(xiàn)短鏈接生成功能

    Java后端實(shí)現(xiàn)短鏈接生成功能

    短鏈接生成主要在于把指定的接口和參數(shù)實(shí)現(xiàn)加密生成比較短的字符串,再進(jìn)行拼接通過指定的域名或者ip實(shí)現(xiàn)鏈接的跳轉(zhuǎn),下面我們來看看如何使用Java實(shí)現(xiàn)這一功能吧
    2025-03-03
  • 詳解@ConfigurationProperties實(shí)現(xiàn)原理與實(shí)戰(zhàn)

    詳解@ConfigurationProperties實(shí)現(xiàn)原理與實(shí)戰(zhàn)

    這篇文章主要介紹了詳解@ConfigurationProperties實(shí)現(xiàn)原理與實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • javaweb Servlet開發(fā)總結(jié)(一)

    javaweb Servlet開發(fā)總結(jié)(一)

    Servlet是sun公司提供的一門用于開發(fā)動(dòng)態(tài)web資源的技術(shù)。這篇文章主要介紹了javaweb Servlet開發(fā)的第一篇,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 一文教會(huì)你如何從0到1搭建一個(gè)SpringBoot項(xiàng)目

    一文教會(huì)你如何從0到1搭建一個(gè)SpringBoot項(xiàng)目

    今天剛好學(xué)習(xí)到SpringBoot,就順便記錄一下吧,下面這篇文章主要給大家介紹了關(guān)于如何從0到1搭建一個(gè)SpringBoot項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評(píng)論