空和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值。

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

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

相关文章

日志打印的学习之log4j2(二)进阶案例

日志级别简述&#xff1a; trace追踪&#xff0c;就是程序推进一下&#xff0c;可以写个trace输出debug调试&#xff0c;一般作为最低级别&#xff0c;trace基本不用。info输出重要的信息&#xff0c;使用较多warn警告&#xff0c;有些信息不是错误信息&#xff0c;但也要给程…

计算机网络——35什么是网络安全

什么是网络安全 机密性&#xff1a;只有发送方和预订的接收方能否理解传输的报文内容 发送方加密报文接收方解密报文 认证&#xff1a;发送方和接收方需要确认对方的身份报文完整性&#xff1a;发送方、接收方需要确认的报文在传输的过程中或者事后没有被改变访问控制和服务的…

如何通过C++身份证实名认证接口实现实名认证功能

线上平台使用身份核验过程是验证个人身份真实性的过程&#xff0c;对于大多数线上平台来说&#xff0c;自己去开发集成身份证实名认证接口需要耗费大量的人力、物力成本&#xff0c;对此&#xff0c;为助力有需要的企业快速实现实名认证的功能&#xff0c;翔云平台提供了身份证…

利用nginx-http-flv-module实现三种直播

目录 一、说明 二、目标 三、实现 四、直播地址 一、说明 此文在《流媒体服务器的搭建(支持hls)》《搭建nginx-http-flv-module直播系统》之后编写,很多详细内容需要参考它。 流媒体服务器的搭建(支持hls)

力扣爆刷第112天之CodeTop100五连刷46-50

力扣爆刷第112天之CodeTop100五连刷46-50 文章目录 力扣爆刷第112天之CodeTop100五连刷46-50一、148. 排序链表二、22. 括号生成三、70. 爬楼梯四、2. 两数相加五、165. 比较版本号 一、148. 排序链表 题目链接&#xff1a;https://leetcode.cn/problems/sort-list/descriptio…

数据结构——顺序表(C语言)

目录 一、顺序表概念 二、顺序表分类 1.静态顺序表 2.动态顺序表 三、顺序表的实现 1.顺序表的结构体定义 2. 顺序表初始化 3.顺序表销毁 4.顺序表的检验 5.顺序表打印 6.顺序表扩容 7.顺序表尾插与头插 8.尾删与头删 9.在pos处插入数据 10.在pos处删除数据 11.查找数据 …

端盒日记Day02

JS 本本本本本地存储 localStorage 作用&#xff1a;可以将数据永久存储在本地&#xff08;用户电脑&#xff09;&#xff0c;除非手动删除&#xff0c;否则关闭页面也会存在 特性&#xff1a;a.可多窗口&#xff08;页面&#xff09;共享&#xff08;同一浏览器可以共享&a…

若依:一个基于Spring Boot、Spring Security、JWT、Vue和Element的全部开源快速开发平台

若依后台管理系统&#xff1a;一个基于Spring Boot、Spring Security、JWT、Vue和Element的全部开源快速开发平台 一、引言 随着软件开发技术的发展&#xff0c;前后端分离的开发模式逐渐成为主流。这种模式能够提高开发效率&#xff0c;降低维护成本&#xff0c;使前后端工程…

C++实现单例模式

#include <iostream> class Singleton { private: static Singleton* instance; // 指向单例实例的指针 Singleton() {} // 私有构造函数 public: // 获取单例对象的唯一全局访问点 static Singleton* getInstance() { if (instance nullpt…

c# wpf template itemtemplate+ListBox

1.概要 2.代码 <Window x:Class"WpfApp2.Window7"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/…

Kafka参数介绍

官网参数介绍:Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/documentation/#configuration

开源大语言模型(LLM)汇总(持续更新中)

随着ChatGPT的火爆&#xff0c;越来越多人希望在本地运行一个大语言模型。为此我维护了这个开源大语言模型汇总&#xff0c;跟踪每天不发的大语言模型和精调语言模型。 我将根据个模型采用的基础大模型进行分类&#xff0c;每个大模型下列出各派生模型。 Alpaca (Stanford) 斯…

STM32CubeIDE基础学习-通用定时器中断实验

STM32CubeIDE基础学习-通用定时器中断实验 文章目录 STM32CubeIDE基础学习-通用定时器中断实验前言第1章 工程配置1.1 工程外设配置部分1.2 生成工程代码部分 第2章 代码编写第3章 实验现象总结 前言 生活中很多应用都有用到定时器功能、计时功能等。 定时器中断可以大大降低…

Win10文件夹共享(有密码的安全共享)(SMB协议共享)

前言 局域网内&#xff08;无安全问题&#xff0c;比如自己家里wifi&#xff09;无密码访问&#xff0c;参考之前的操作视频 【电脑文件全平台共享、播放器推荐】手机、电视、平板播放硬盘中的音、视频资源 下面讲解公共网络如办公室网络、咖啡厅网络等等环境下带密码的安全…

python爬虫———post请求方式(第十四天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

C++学习笔记(五)

临时对象与C11右值引用 右值&#xff1a;不可取地址的值是右值。左值&#xff1a;可以取地址就是左值。 -------------------------------------- 临时对象&#xff1a; ----------------- 临时对象的特性&#xff1a; -------------------- 系统不分配地址&#xff0c;在下一…

android wifi连接

记住密码&#xff0c;第二次登录不必输入。 如果使用其他方式&#xff0c;可不可以。其实就是自己选择wifi。 ******************** 我根本没办法站在更高的维度去思考整个项目&#xff0c;认知也达不到&#xff0c;我很多的事情都不知道&#xff08;信息不全&#xff09;&…

力扣经典150题第二题:移除元素

移除元素问题详解与解决方法 1. 介绍 移除元素问题是 LeetCode 经典题目之一&#xff0c;要求原地修改输入数组&#xff0c;移除所有数值等于给定值的元素&#xff0c;并返回新数组的长度。 问题描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等…

关于阿里云中RDS数据库的CPU使用率和内存使用率的20道高级面试题2

1. 什么是RDS数据库的CPU使用率&#xff1f;如何监控和管理它&#xff1f; RDS数据库的CPU使用率指的是数据库在执行各项操作时对CPU资源的占用情况。监控和管理CPU使用率可以通过RDS管理控制台来实现。 RDS管理控制台提供了多种工具和方法来查看和监控CPU的使用情况&#xf…

使用vue计算斐波那契数列的第n项

Vue的新特性主要关注于提升性能、优化开发体验以及增加组件的灵活性和可维护性。然而&#xff0c;Vue本身并不是专门用于实现动态规划&#xff08;Dynamic Programming, DP&#xff09;的库或框架。动态规划是一种在数学、计算机科学和经济学中使用的&#xff0c;通过把原问题分…