当前位置: 首页 > news >正文

空和null是两回事

文章目录

  • 前言 StringUtils
  • 1. 空(empty):
    • 字符串:
    • 集合:
  • 2. null:
    • 引用类型变量:
    • 基本类型变量:
  • 3. isBlank
  • 总结:


前言 StringUtils

提示:这里可以添加本文要记录的大概内容:

StringUtils 是 Apache Commons Lang 库中提供的一个工具类,专为处理 java.lang.String 类型的对象而设计。这个类提供了大量静态方法,用于执行各种常见的字符串操作,如检查空值、空白字符处理、比较、查找、截取、转换、拆分、拼接、填充、修剪等。StringUtils 类旨在作为 Java 标准库中 String 类方法的补充,提供更加便捷、高效且 null 安全的字符串处理功能。

以下几个方面概括了 StringUtils 的核心特点和用途:

  1. Null-safe 字符串操作:
    StringUtils 方法通常会处理 null 值输入,避免直接调用 String 类方法时可能引发的 NullPointerException。例如,StringUtils.isEmpty(null) 会返回 true,而不是抛出异常。

  2. 空值与空白字符检查:
    提供了一系列方法用于检查字符串是否为空、空字符串、仅包含空白字符或非空白字符:

    • isEmpty(String str): 检查字符串是否为 null 或长度为 0。
    • isNotEmpty(String str): 恰好与 isEmpty 相反,检查字符串是否非空(既不是 null 也不是长度为 0)。
    • isBlank(String str): 检查字符串是否为 null、长度为 0 或仅包含空白字符(如空格、制表符、换行符等)。
    • isNotBlank(String str): 恰好与 isBlank 相反,检查字符串是否非空且非空白。
  3. 字符串修剪:
    提供了方法来去除字符串两端的空白字符:

    • trim(String str): 返回去除两端空白字符后的字符串副本。
    • trimToNull(String str): 去除两端空白字符,若结果为空字符串,则返回 null
    • trimToEmpty(String str): 去除两端空白字符,若输入为 null,则返回空字符串。
  4. 字符串比较:
    提供了多种字符串比较方式,包括忽略大小写、忽略空白等:

    • equals(String str1, String str2): 安全地比较两个字符串是否相等。
    • equalsIgnoreCase(String str1, String str2): 同上,但忽略大小写。
    • compare(String str1, String str2): 比较两个字符串的字典顺序,返回整数结果。
  5. 字符串拼接与拆分:
    提供了替代 Stringconcat 方法的拼接方法,以及基于特定分隔符的字符串拆分方法:

    • join(Object[] array, String separator): 将数组中的元素连接成一个字符串,用指定分隔符隔开。
    • split(String str, String separatorChars): 根据给定的分隔符将字符串分割成一个字符串数组。
  6. 以及其他实用方法:
    包括但不限于查找子字符串、提取子字符串、重复字符串、检查字符串是否以特定字符开头/结尾、转换字符串为驼峰式/下划线式等。

使用 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");
}

上述代码中,nullStringnullList分别被赋值为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 方法的行为如下:

  1. 空字符串 (""):如果输入的字符串长度为零(即没有任何字符),则认为是空白。

  2. 只包含空白字符的字符串:如果输入的字符串中所有字符都是空白字符,如空格(' ', ASCII 32)、制表符(\t, ASCII 9)、换行符(\n, ASCII 10)、回车符(\r, ASCII 13)以及其他Unicode空白字符(如不间断空格、窄空格等),则认为是空白。

  3. 非空白字符串:如果输入的字符串包含至少一个非空白字符,则认为不是空白。

简而言之,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. 空&#xff08;empty&#xff09;&#xff1a;字符串&#xff1a;集合&#xff1a; 2. null&#xff1a;引用类型变量&#xff1a;基本类型变量&#xff1a; 3. isBlank总结&#xff1a; 前言 StringUtils 提示&#xff1a;这里可以添加本文要记录…...

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包安装用国内镜像源

一&#xff1a;临时用国内源 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple 例如&#xff1a;pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider&#xff0c;这样就会从清华这边的镜像去安装pyspider库 清华&#xff1a;https://py…...

uniapp:小程序腾讯地图程序文件qqmap-wx-jssdk.js 文件一直找不到无法导入

先看问题&#xff1a; 在使用腾讯地图api时无法导入到qqmap-wx-jssdk.js文件 解决方法&#xff1a;1、打开qqmap-wx-jssdk.js最后一行 然后导入&#xff1a;这里是我的路径位置&#xff0c;可以根据自己的路径位置进行更改导入 最后在生命周期函数中输出&#xff1a; 运行效果…...

如何物理控制另一台电脑以及无网络用作副屏(现成设备和使用)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 控制另一台电脑有很多方法&…...

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项目。

演示视频&#xff1a; 基于Springboot的美发管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…...

最新测试技术

在软件测试领域,随着技术的不断进步和行业需求的变化,新的测试技术和方法不断涌现。以下是一些最新的测试技术,它们正在塑造着软件测试的未来: 人工智能和机器学习(AI/ML)在测试中的应用 人工智能和机器学习正在被集成到软件测试中,以提高测试的自动化水平和效率。AI可…...

【算法】初识算法

尽量不说废话 算法 一、数据结构二、排序算法三、检索算法四、字符算类型算法五、递归算法六、贪心算法七、动态规划八、归一化算法后记 我们这里指的算法&#xff0c;是作为程序员在计算机编程时运用到的算法。 算法是一个庞大的体系&#xff0c;主要包括以下内容&#xff1a;…...

HomeBrew 安装与应用

目录 前言一、安装 HomeBrew二、使用 HomeBrew1、使用 brew 查看已安装的软件包2、使用 brew 安装软件包3、使用 brew 升级已安装的软件包4、brew 还有哪些命令呢&#xff1f; 前言 在 macOS&#xff08;或Linux&#xff09;系统里&#xff0c;默认是没有软件包的管理器的&…...

JS详解-设计模式

工厂模式&#xff1a; 单例模式&#xff1a; // 1、定义一个类class SingleTon{// 2、添加私有静态属性static #instance// 3、添加静态方法static getInstance(){// 4、判断实例是否存在if(!this.#instance){// 5、实例不存在&#xff0c;创建实例this.#instance new Single…...

探寻马来西亚服务器托管的优势与魅力

随着全球跨境业务的不断增加&#xff0c;境外服务器成为越来越受欢迎的选择。在这其中&#xff0c;马来西亚服务器备受关注&#xff0c;其机房通常位于马来西亚首都吉隆坡。对于客户群体主要分布在东南亚、澳大利亚和新西兰等地区的用户来说&#xff0c;马来西亚服务器是一个理…...

虚幻UE5数字孪生蓝图开发教程

一、背景 这几年&#xff0c;智慧城市/智慧交通/智慧水利等飞速发展&#xff0c;骑士特意为大家做了一个这块的学习路线。 二、这是学习大纲 1.给虚幻UE5初学者准备的智慧城市/数字孪生蓝图开发教程 https://www.bilibili.com/video/BV1894y1u78G 2.UE5数字孪生蓝图开发教学…...

七、Mybatis-缓存

文章目录 缓存一级缓存二级缓存1.概念2.二级缓存开启的条件:3.使二级缓存失效的情况&#xff1a;4.在mapper配置文件中添加的cache标签可以设置一些属性:5.MyBatis缓存查询的顺序 缓存 一级缓存 级别为sqlSession&#xff0c;Mybatis默认开启一级缓存。 使一级缓存失效的四种…...

数据结构(六)——图的应用

6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E)&#xff0c;⽣成树不同&#xff0c;每棵树的权&#xff08;即树中所有边上的权值之和&#xff09;也可能不同。设R为G的所有⽣成树的集合&#xff0c;若T为R中边的权值之和最小的生成树&#xff0c;则T称为G的…...

java自动化测试学习-03-06java基础之运算符

运算符 算术运算符 运算符含义举例加法&#xff0c;运算符两侧的值相加ab等于10-减法&#xff0c;运算符左侧减右侧的值a-b等于6*乘法&#xff0c;运算符左侧的值乘以右侧的值a*b等于16/除法&#xff0c;运算符左侧的值除以右侧的值a/b等于4%取余&#xff0c;运算符左侧的值除…...

【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类&#xff08;一&#xff09;\_\_init\_\_函数&#xff08;二&#xff09;\_\_len\_\_函数&#xff08;三&#xff09;\_\_getitem\_\函数&#xff08;四&#xff09;全部代码 三、将单个样本组成minibatch&#xff08;Data…...

4.6(信息差)

&#x1f30d; 山西500千伏及以上输电线路工程首次采用无人机AI自主验收 &#x1f30b; 中国与泰国将开展国际月球科研站等航天合作 ✨ 网页版微软 PowerPoint 新特性&#xff1a;可直接修剪视频 &#x1f34e; 特斯拉开始在德国超级工厂生产出口到印度的右舵车 1.马斯克&…...

关于C#操作SQLite数据库的一些函数封装

主要功能&#xff1a;增删改查、自定义SQL执行、批量执行&#xff08;事务&#xff09;、防SQL注入、异常处理 1.NuGet中安装System.Data.SQLite 2.SQLiteHelper的封装&#xff1a; using System; using System.Collections.Generic; using System.Data.SQLite; using System.…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...