空和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.…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...