Java不定参数使用及一些注意情况

news2024/9/28 15:30:44

一、背景

在项目中使用到了StringUtils.isAllBlack(String …css)方法。可以很方便地传递不定数量的参数进行空判。
但开发过程中遇到了一些问题,所以特地记录一下。

二、不定参数传参

不定参数的传参本质上是一个泛型的数组。参数数量大于等于两个的时候,系统会把传入的参数都放到一个对应类型的数组里面。
但传单个参数的时候存在一些需要注意的情况,不注意可能会出现空指针异常。

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);
	}
}

上述代码运行结果是输出:null
程序把传入的null当成一个元素放到了参数数组里面。
在这里插入图片描述

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当成参数数组的一个元素,而是直接让参数数组为null。因为没有明确告诉程序这个null是什么类型的,系统直接把null的类型转换成不定参数对应的Object[]类型。因此css为空。
在这里插入图片描述

2.3、验证直接传null的默认效果

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);
	}
}

上述代码的运行结果和直接传单个null一样,符合预期。
在这里插入图片描述

2.4、直接传单个null(加类型强转)

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);
	}
}

上述代码,因为强转告诉系统参数的数据类型,系统又把null当成了参数数组里面的一个元素来处理。这里的类型强转和2.1、的传参方式本质上是一样的。
在这里插入图片描述

2.5、注意

直接传单个null的时候效果相当于传(T[]) null,css会为空。

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

	1.StringUtils.isAnyBlank((String) null)    = true
	2.StringUtils.isAnyBlank((String[]) null)  = false
	3.StringUtils.isAnyBlank(null, "foo")      = true
	4.StringUtils.isAnyBlank(null, null)       = true
	5.StringUtils.isAnyBlank("", "bar")        = true
	6.StringUtils.isAnyBlank("bob", "")        = true
	7.StringUtils.isAnyBlank("  bob  ", null)  = true
	8.StringUtils.isAnyBlank(" ", "bar")       = true
	9.StringUtils.isAnyBlank(new String[] {})  = false
	10.StringUtils.isAnyBlank(new String[]{""}) = true
	11.StringUtils.isAnyBlank("foo", "bar")     = false

一个一个解释上面的调用方式,在org.apache.commons.lang3.StringUtils中。
首先,这个方法是用来判断传入的参数是否存在为空或空串。
第一个,相当于传入了一个null放在参数数组里面,有一个元素,并且为null,因此为真。
第二个,默认类型为String[],相当于css为空,也就是参数数组为空,相当于没有传入元素,没有传入参数也就不会有参数为空,因此为假。和StringUtils.isAnyBlank(null)效果一样
第三个,传入了两个参数,第一个为null,因此为真。
第四个,传入两个null,多个参数情况下,默认类型是String,两个null,因此为真。
第五个,第一个参数传入空串,因此为真。
第六个,第二个参数传入空串,因此为真。
第七个,第二个参数传入null,因此为真。
第八个,第一个参数传入空格,空格也在black的判断里面,因此为真。
第九个,传入一个容量为0的空字符串数组,因为里面没有元素,也就没有元素为空或空串,因此为假。
第十个,传入一个数组,里面有一个空串,因此为真。
第十一个,传入两个字符串,都不为空或空串,因此为假。
再加一种情况,传入一个容量不为0的空字符串数组,因为数组里面默认填充null,因此为真。

重点需要考虑的就是不同查找时候,对于参数数组为null的情况的处理。
总的来说可以这样理解:存在xxx,就看元素是否存在xxx,存在就为真,不存在就为假(参数数组都为null的情况当然是不存在)。全部xxx,就查询元素是否存在反xxx,存在就为假,不存在就为真(参数数组都为null的情况当然是不存在)。
也正是因为如此,存在和全部这两种判断在遇到参数数组为空的时候判断结果才完全相反。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/984754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

薅羊毛零撸小游戏是这样赚米的!

薅羊毛小游戏作为一种特殊类型的游戏,吸引了一大批用户的关注。本文将探讨薅羊毛小游戏的盈利模式、用户体验以及对游戏产业的影响,旨在为读者提供专业而有深度的思考和启示。 一、薅羊毛小游戏的盈利模式: 1.广告变现:薅羊毛小游…

R-CNN

目标检测、语义分割 由于我们将区域建议与CNN相结合,我们将我们的方法称为R-CNN:带有CNN特征的区域。 目标检测系统由三个模块组成。第一种方法生成分类独立的区域提案。这些提议定义了可供我们的检测器使用的候选检测集合。第二个模块是一个大型卷积神经网络&…

【C++基础】类与对象(中):默认成员函数、构造函数、析构函数、拷贝构造、赋值重载函数……

​👻内容专栏: C/C编程 🐨本文概括: C基础语法。六大默认构造函数简介、构造函数、析构函数、拷贝构造函数、赋值重载函数、const成员函数、取地址重载等。 🐼本文作者: 阿四啊 🐸发布时间&…

开开心心带你学习MySQL数据库之第六篇上

​ 💮 💮💮 只要路是对的,就不害怕遥远! 💮 💮💮 🎆🎆🎆窗台是风景,笔下有前途,低头是题海,抬头是未来🎆&…

扩散模型 DDPM 核心代码梳理

参考内容: 大白话AI | 图像生成模型DDPM | 扩散模型 | 生成模型 | 概率扩散去噪生成模型 AIGC 基础,从VAE到DDPM 原理、代码详解 全网最简单的扩散模型DDPM教程 The Annotated Diffusion Model LaTeX公式编辑器 备注: 具体公式的推导请查看…

BC类电池取代TOPCon?隆基绿能看得很“远”

隆基绿能在业绩会上喊话,BC类电池在未来会逐步取代TOPCON电池,成为晶硅电池的绝对主流,并指出N型TOPCon电池只是短期过渡技术路线。 “All in ”BC类电池的隆基绿能,重新定义技术路线的野望藏不住。 目前来看,相比TO…

数据接口工程对接BI可视化大屏(一)

文章目录 第1章 案例概述1.1 案例目标1.2 BI最终效果1.2.1 PC端显示效果1.2.2 移动端显示效果 后记 第1章 案例概述 1.1 案例目标 此项目以常见的手机零售BI场景为例,介绍如何编写数据接口工程对接BI可视化大屏。 如何从当前常见的主流大数据场景中为后台程序推送…

入行测试一年半的心得体会

成为xx一员测试已经有1年半了,一直没有真正坐下来花些时间将自己的思路理清一下。刚好近期公司落地了OKR,给自己制定了OKR之后思路终于开始清晰起来,朦朦胧胧地开始看清了远方的路,麻着胆子分析一下自己,毕竟摸黑走路的…

2023年9月CSPM-3国标项目管理中级认证报名,找弘博创新

CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要…

【效率提升】手把手教你如何使用免费的 Amazon Code Whisperer 提升开发效率堪比 GitHub Copilot 平替

说明 GitHub copilot 虽然很强,但是一个月10美金的费用拿来吃个小火锅他不香吗?而身为云计算博主将向你推荐一款可以平替 GitHub copilot 并且免费的支持多种编程语言的 AI 编程助手 Amazon Code Whisperer。 亚马逊云科技开发者社区为开发者们提供全球…

基于文本提示的图像目标检测与分割实践

近年来,计算机视觉取得了显着的进步,特别是在图像分割和目标检测任务方面。 最近值得注意的突破之一是分段任意模型(SAM),这是一种多功能深度学习模型,旨在有效地从图像和输入提示中预测对象掩模。 通过利用…

Web安全——Web安全漏洞与利用上篇(仅供学习)

SQL注入 一、SQL 注入漏洞1、与 mysql 注入的相关知识2、SQL 注入原理3、判断是否存在注入回显是指页面有数据信息返回id 1 and 114、三种 sql 注释符5、注入流程6、SQL 注入分类7、接受请求类型区分8、注入数据类型的区分9、SQL 注入常规利用思路:10、手工注入常规…

ansible的安装和简单的块使用

目录 一、概述 二、安装 1、选择源 2、安装ansible 3、模块查看 三、实验 1、拓扑​编辑 2、设置组、ping模块 3、hostname模块 4、file模块 ​编辑 5、stat模块 6、copy模块(本地拷贝到远程) 7、fetch模块与copy模块类似,但作用…

YOLOv5改进算法之添加CA注意力机制模块

目录 1.CA注意力机制 2.YOLOv5添加注意力机制 送书活动 1.CA注意力机制 CA(Coordinate Attention)注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息,以便模型可以更好地…

火热的低代码,是时候系统的来学一学了!

一、前言 低代码诞生至今,大家各抒己见,也不乏有针锋相对的意思。古时的治国之术有百家争鸣,如今的低代码也有“诸子论道”,这本质上是一件有助于推动低代码发展的事情。 业内的朋友们一定知道,关于低代码的热点不止发…

数字内容风控行业首本白皮书正式发布,打造长效安全的数字内容生态

数字内容包含文本、图片、视频等多种形式,起源于计算机问世,并随着互联网、智能手机快速发展,如今,数字内容已经成为个人及企业建立形象、传播价值的必要途径。 2022年起,随着ChatGPT的火爆出圈,AI大模型强…

Kotlin+MVVM 构建todo App 应用

作者:易科 项目介绍 使用KotlinMVVM实现的todo app,功能界面参考微软的Todo软件(只实现了核心功能,部分功能未实现)。 功能模块介绍 项目模块:添加/删除项目,项目负责管理todo任务任务模块&a…

执行上下文-通俗易懂版

(1) js引擎执行代码时候/前,在堆内存创建一个全局对象,该对象 所有的作用域(scope)都可以访问,里面会包含Date、Array、String、Number、setTimeout、setInterval等等,其中还有一个window属性指向自己 (2…

C++数组类的自实现,使其可以保存学生成绩,并进行降序排列

类的封装 #ifndef ARRAY_H #define ARRAY_Hclass DoubArray { private:int m_length;double* m_pointer;public:DoubArray(int len);DoubArray(const DoubArray& obj);int length();bool get(int index, double& value);bool set(int index, double value);void sort(…

尚硅谷大数据项目《在线教育之离线数仓》笔记007

视频地址:尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 第12章 报表数据导出 P112 01、创建数据表 02、修改datax的jar包 03、ads_traffic_stats_by_source.json文件 P113 P114 P115 P116 P117 P118 P119 P120 P121 P122【122_在…