空和null是两回事
文章目录
- 前言 StringUtils
- 1. 空(empty):
- 字符串:
- 集合:
- 2. null:
- 引用类型变量:
- 基本类型变量:
- 3. isBlank
- 总结:
前言 StringUtils
提示:这里可以添加本文要记录的大概内容:
StringUtils 是 Apache Commons Lang 库中提供的一个工具类,专为处理 java.lang.String 类型的对象而设计。这个类提供了大量静态方法,用于执行各种常见的字符串操作,如检查空值、空白字符处理、比较、查找、截取、转换、拆分、拼接、填充、修剪等。StringUtils 类旨在作为 Java 标准库中 String 类方法的补充,提供更加便捷、高效且 null 安全的字符串处理功能。
以下几个方面概括了 StringUtils 的核心特点和用途:
-
Null-safe 字符串操作:
StringUtils方法通常会处理null值输入,避免直接调用String类方法时可能引发的NullPointerException。例如,StringUtils.isEmpty(null)会返回true,而不是抛出异常。 -
空值与空白字符检查:
提供了一系列方法用于检查字符串是否为空、空字符串、仅包含空白字符或非空白字符:isEmpty(String str): 检查字符串是否为null或长度为 0。isNotEmpty(String str): 恰好与isEmpty相反,检查字符串是否非空(既不是null也不是长度为 0)。isBlank(String str): 检查字符串是否为null、长度为 0 或仅包含空白字符(如空格、制表符、换行符等)。isNotBlank(String str): 恰好与isBlank相反,检查字符串是否非空且非空白。
-
字符串修剪:
提供了方法来去除字符串两端的空白字符:trim(String str): 返回去除两端空白字符后的字符串副本。trimToNull(String str): 去除两端空白字符,若结果为空字符串,则返回null。trimToEmpty(String str): 去除两端空白字符,若输入为null,则返回空字符串。
-
字符串比较:
提供了多种字符串比较方式,包括忽略大小写、忽略空白等:equals(String str1, String str2): 安全地比较两个字符串是否相等。equalsIgnoreCase(String str1, String str2): 同上,但忽略大小写。compare(String str1, String str2): 比较两个字符串的字典顺序,返回整数结果。
-
字符串拼接与拆分:
提供了替代String类concat方法的拼接方法,以及基于特定分隔符的字符串拆分方法:join(Object[] array, String separator): 将数组中的元素连接成一个字符串,用指定分隔符隔开。split(String str, String separatorChars): 根据给定的分隔符将字符串分割成一个字符串数组。
-
以及其他实用方法:
包括但不限于查找子字符串、提取子字符串、重复字符串、检查字符串是否以特定字符开头/结尾、转换字符串为驼峰式/下划线式等。
使用 StringUtils 类的主要优点在于其简化了字符串处理逻辑,增强了代码可读性,同时提供了对 null 值的安全处理,有助于减少潜在的运行时错误。在Java开发中,尤其是在处理用户输入、数据清洗、配置解析、日志记录、数据序列化与反序列化等场景中,StringUtils 类方法常被广泛应用。要使用这些方法,需确保已将 org.apache.commons:commons-lang3 库添加到项目的依赖中。
提示:以下是本篇文章正文内容,下面案例可供参考
当然可以,接下来我将通过代码示例进一步详细阐述Java中"空"和"null"的区别:
1. 空(empty):
字符串:
String emptyString = "";
System.out.println(emptyString.length()); // 输出:0
System.out.println(emptyString.isEmpty()); // 输出:true
以上代码创建了一个空字符串"",其length()方法返回0,表示没有包含任何字符。同时,isEmpty()方法返回true,进一步验证这是一个空字符串。
集合:
List<String> emptyList = new ArrayList<>();
System.out.println(emptyList.size()); // 输出:0
System.out.println(emptyList.isEmpty()); // 输出:trueSet<String> emptySet = new HashSet<>();
System.out.println(emptySet.size()); // 输出:0
System.out.println(emptySet.isEmpty()); // 输出:true
这里创建了两个空集合:一个空的ArrayList和一个空的HashSet。它们的size()方法都返回0,表示没有包含任何元素。isEmpty()方法均返回true,确认它们是空集合。
2. null:
引用类型变量:
String nullString = null;
List<String> nullList = null;try {System.out.println(nullString.length()); // 抛出 NullPointerExceptionSystem.out.println(nullList.size()); // 抛出 NullPointerException
} catch (NullPointerException e) {System.out.println("Caught NullPointerException");
}
上述代码中,nullString和nullList分别被赋值为null。当试图调用它们的length()和size()方法时,会抛出NullPointerException,因为它们并未指向任何实际对象。在实际编程中,需要通过条件判断或使用Objects.requireNonNull()等方法来避免此类异常。
基本类型变量:
int primitiveInt = 0;
Integer objectInt = null;System.out.println(primitiveInt); // 输出:0
System.out.println(objectInt); // 输出:null
这里展示了基本类型变量(primitiveInt)与包装类型变量(objectInt)的区别。基本类型变量不能取null值,如primitiveInt被赋值为0,输出其值为0。而包装类型变量可以取null值,如objectInt被赋值为null,输出其值为null。
3. isBlank
isBlank 包括了 empty 的检查范围,即 null 和空字符串
StringUtils.isBlank :是空字符串、只包含空白字符
!StringUtils.isBlank:非空字符串、不只包含空白字符
StringUtils.isBlank 是 Apache Commons Lang 库中提供的一个实用方法,用于判断给定的字符串是否为空白。这里的“空白”不仅包括空字符串(""),还包括只包含空白字符(如空格、制表符、换行符等)的字符串。具体来说,StringUtils.isBlank 方法的行为如下:
-
空字符串 (
""):如果输入的字符串长度为零(即没有任何字符),则认为是空白。 -
只包含空白字符的字符串:如果输入的字符串中所有字符都是空白字符,如空格(
' ', ASCII 32)、制表符(\t, ASCII 9)、换行符(\n, ASCII 10)、回车符(\r, ASCII 13)以及其他Unicode空白字符(如不间断空格、窄空格等),则认为是空白。 -
非空白字符串:如果输入的字符串包含至少一个非空白字符,则认为不是空白。
简而言之,StringUtils.isBlank 方法旨在检测一个字符串是否既无实质内容又无意义,即要么完全没有字符,要么全部由空白字符组成。在编程实践中,此方法常用于数据验证、清理或格式化,帮助开发者快速判断一个字符串是否需要进一步处理或是否可以视为无效输入。
使用示例:
import org.apache.commons.lang3.StringUtils;public class Example {public static void main(String[] args) {String emptyString = "";String whitespaceString = " ";String nonEmptyString = "Hello, World!";System.out.println(StringUtils.isBlank(emptyString)); // 输出:trueSystem.out.println(StringUtils.isBlank(whitespaceString)); // 输出:trueSystem.out.println(StringUtils.isBlank(nonEmptyString)); // 输出:false}
}
在这个示例中,StringUtils.isBlank 分别判断了空字符串、只包含空白字符的字符串和非空白字符串,输出结果反映了它们是否被识别为空白。
总结:
通过上述代码示例,我们可以更直观地看到Java中"空"(empty)和"null"的区别:
- “空”(empty)表示容器(如字符串、集合等)内没有内容,它们是实际存在的对象,可以进行各种对象操作(如计算长度、检查是否为空等),但通常不包含有意义的数据。
- "null"表示引用没有指向任何对象,对
null引用进行对象方法调用或属性访问会抛出NullPointerException。在使用引用类型变量时,需要特别注意处理可能的null值,以避免运行时异常。基本类型变量不能取null值。
相关文章:
空和null是两回事
文章目录 前言 StringUtils1. 空(empty):字符串:集合: 2. null:引用类型变量:基本类型变量: 3. isBlank总结: 前言 StringUtils 提示:这里可以添加本文要记录…...
UNIAPP(小程序)每十个文章中间一个广告
三十秒刷新一次广告 ad-intervals"30" <template><view style"margin: 30rpx;"><view class"" v-for"(item,index) in 100"><!-- 广告 --><view style"margin-bottom: 20rpx;" v-if"(inde…...
pip包安装用国内镜像源
一:临时用国内源 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple 例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider,这样就会从清华这边的镜像去安装pyspider库 清华:https://py…...
uniapp:小程序腾讯地图程序文件qqmap-wx-jssdk.js 文件一直找不到无法导入
先看问题: 在使用腾讯地图api时无法导入到qqmap-wx-jssdk.js文件 解决方法:1、打开qqmap-wx-jssdk.js最后一行 然后导入:这里是我的路径位置,可以根据自己的路径位置进行更改导入 最后在生命周期函数中输出: 运行效果…...
如何物理控制另一台电脑以及无网络用作副屏(现成设备和使用)
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 控制另一台电脑有很多方法&…...
Aurora8b10b(1)IP核介绍并基于IP核进行设计
文章目录 前言一、IP核设置二、基于IP核进行设计2.1、设计框图2.2、aurora_8b10b_0模块2.3、aurora_8b10b_0_CLOCK_MODULE2.4、aurora_8b10b_0_SUPPORT_RESET_LOGIC2.5、aurora8b10b_channel模块2.6、IBUFDS_GTE2模块2.7、aurora_8b10b_0_gt_common_wrapper模块2.8、aurora8b10…...
基于Springboot的美发管理系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的美发管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…...
最新测试技术
在软件测试领域,随着技术的不断进步和行业需求的变化,新的测试技术和方法不断涌现。以下是一些最新的测试技术,它们正在塑造着软件测试的未来: 人工智能和机器学习(AI/ML)在测试中的应用 人工智能和机器学习正在被集成到软件测试中,以提高测试的自动化水平和效率。AI可…...
【算法】初识算法
尽量不说废话 算法 一、数据结构二、排序算法三、检索算法四、字符算类型算法五、递归算法六、贪心算法七、动态规划八、归一化算法后记 我们这里指的算法,是作为程序员在计算机编程时运用到的算法。 算法是一个庞大的体系,主要包括以下内容:…...
HomeBrew 安装与应用
目录 前言一、安装 HomeBrew二、使用 HomeBrew1、使用 brew 查看已安装的软件包2、使用 brew 安装软件包3、使用 brew 升级已安装的软件包4、brew 还有哪些命令呢? 前言 在 macOS(或Linux)系统里,默认是没有软件包的管理器的&…...
JS详解-设计模式
工厂模式: 单例模式: // 1、定义一个类class SingleTon{// 2、添加私有静态属性static #instance// 3、添加静态方法static getInstance(){// 4、判断实例是否存在if(!this.#instance){// 5、实例不存在,创建实例this.#instance new Single…...
探寻马来西亚服务器托管的优势与魅力
随着全球跨境业务的不断增加,境外服务器成为越来越受欢迎的选择。在这其中,马来西亚服务器备受关注,其机房通常位于马来西亚首都吉隆坡。对于客户群体主要分布在东南亚、澳大利亚和新西兰等地区的用户来说,马来西亚服务器是一个理…...
虚幻UE5数字孪生蓝图开发教程
一、背景 这几年,智慧城市/智慧交通/智慧水利等飞速发展,骑士特意为大家做了一个这块的学习路线。 二、这是学习大纲 1.给虚幻UE5初学者准备的智慧城市/数字孪生蓝图开发教程 https://www.bilibili.com/video/BV1894y1u78G 2.UE5数字孪生蓝图开发教学…...
七、Mybatis-缓存
文章目录 缓存一级缓存二级缓存1.概念2.二级缓存开启的条件:3.使二级缓存失效的情况:4.在mapper配置文件中添加的cache标签可以设置一些属性:5.MyBatis缓存查询的顺序 缓存 一级缓存 级别为sqlSession,Mybatis默认开启一级缓存。 使一级缓存失效的四种…...
数据结构(六)——图的应用
6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的…...
java自动化测试学习-03-06java基础之运算符
运算符 算术运算符 运算符含义举例加法,运算符两侧的值相加ab等于10-减法,运算符左侧减右侧的值a-b等于6*乘法,运算符左侧的值乘以右侧的值a*b等于16/除法,运算符左侧的值除以右侧的值a/b等于4%取余,运算符左侧的值除…...
【VASP学习】在Ubuntu系统安装vasp.5.4.4的全过程(包括VASP官方学习资料、安装过程中相关编辑器的配置、VASP的编译及VASP的测试)
在Ubuntu系统安装vasp.5.4.4的全过程 VASP的简介与相关学习资料安装前的准备工作及说明安装过程intel编译器的安装VASP的编译VASP的测试 参考来源 VASP的简介与相关学习资料 VASP(Vienna Ab initio Simulation Package)是基于第一性原理对原子尺度的材料进行模拟计算的软件。比…...
PyTorch|Dataset与DataLoader使用、构建自定义数据集
文章目录 一、Dataset与DataLoader二、自定义Dataset类(一)\_\_init\_\_函数(二)\_\_len\_\_函数(三)\_\_getitem\_\函数(四)全部代码 三、将单个样本组成minibatch(Data…...
4.6(信息差)
🌍 山西500千伏及以上输电线路工程首次采用无人机AI自主验收 🌋 中国与泰国将开展国际月球科研站等航天合作 ✨ 网页版微软 PowerPoint 新特性:可直接修剪视频 🍎 特斯拉开始在德国超级工厂生产出口到印度的右舵车 1.马斯克&…...
关于C#操作SQLite数据库的一些函数封装
主要功能:增删改查、自定义SQL执行、批量执行(事务)、防SQL注入、异常处理 1.NuGet中安装System.Data.SQLite 2.SQLiteHelper的封装: using System; using System.Collections.Generic; using System.Data.SQLite; using System.…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
