Java 之empty、null、blank详解

Java 之empty、null、blank介绍

在Java中,empty、null和blank都不是关键字(keyword)。

(1)empty是命名规范,用于表示集合、数组、字符串等是否为空。
(2)null,字面量,用于表示变量未引用任何对象。
(3)blank是命名规范,用于判断字符串是否为空或仅包含空格字符。

Empty(空):表示对象或容器中没有任何元素或内容。例如,一个空字符串表示一个没有字符的字符串,一个空集合表示一个没有元素的集合。这是一种状态或属性,用于描述对象的内容为空。

null(空值,空引用):表示一个变量没有引用任何对象。它是一个特殊的值,可以赋给引用类型的变量。当一个变量被赋值为null时,它不再指向任何有效的内存地址。这意味着它不引用任何对象,因此无法访问其成员或调用其方法。

Blank(空白,空白字符)表示一个字符串的内容是空白字符。空白字符(Blank)包括空格字符、制表符(Tab)和换行符(Newline),以及其他不可见的空白字符。这些字符被视为“空白”,因为它们在屏幕上不会显示出来,但在字符串中占据一个位置。

空字符与空格字符串及null的概念
(1)null是一个对象的值,未分配空间。
(2)空字符串(“”)是一个长度为0的字符串,分配内存空间
(3)空格字符串(" ")是一个长度为1的字符串,分配内存空间

在java的参数校验里经常涉及几种校验null,empty、blank

null:表示对象为空的校验
empty:对于字符串,表示字符串为null或者空字符,对于集合,表示集合为null或者长度为0的空集合
blank:表示字符串为空或者长度为0的空字符、空格字符串

Empty表示一个值或变量不包含任何数据,可以用于字符串、集合和数组。
Null表示一个变量没有引用任何对象,只适用于引用类型的变量。
Blank表示一个字符串只包含空格字符,只适用于字符串类型。

empty

Empty(空)是指一个值或变量不包含任何数据。在Java中,以下情况被认为是empty:

  • 对于字符串类型(String):一个空字符串,即长度为0的字符串。
  • 对于集合类型(List、Set等):一个空集合,即不包含任何元素的集合。
  • 对于数组类型:一个空数组,即长度为0的数组。
String str = "";
System.out.println(str.isEmpty());  // 输出: true

List<String> list = new ArrayList<>();
System.out.println(list.isEmpty());  // 输出: true

int[] arr = new int[0];
System.out.println(arr.length == 0);  // 输出: true

empty表示一个字符串或集合为空的情况。
☆对于字符串来说,可以通过判断字符串的长度是否为0来确定是否为空。示例代码如下:

public class Example {
    public static void main(String[] args) {
        // Empty(空)
        String str = "";
        if (str.isEmpty()) {
            System.out.println("字符串为空");
        }
    }
}

☆对于集合而言,可以通过判断集合的大小是否为0来确定是否为空。示例代码如下:

import java.util.ArrayList;
import java.util.List;
 
public class Example {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        if (list.isEmpty()) {
            System.out.println("集合为空");
        }
    }
}

null

null表示一个对象不存在。如果一个引用变量没有被初始化或被显式赋值为null,那么这个变量的值就是null
null表示一个引用变量没有指向任何对象的情况。在使用时要格外谨慎,因为如果对一个null引用进行操作,会抛出NullPointerException异常。示例代码如下:

public class Example {
    public static void main(String[] args) {
        // 引用类型赋值为null
        String obj = null;
 
        // 对象引用判空
        if (obj == null) {
             System.out.println("对象引用为空");
        }
    }
}

在上述示例中,我们使用==运算符来比较obj引用是否为null。

Null(空值)表示一个变量没有引用任何对象。在Java中,如果一个变量被赋予null值,那么它将不指向任何有效的对象。示例

String str = null;
System.out.println(str == null);  // 输出: true

Object obj = null;
System.out.println(obj == null);  // 输出: true

注意:null只能用于引用类型的变量,对于基本数据类型(如int、boolean等),它们不能被赋予null值, 否则会出现编译错误。
注意:空对象不能使用诸如.length(),.equals()等对象方法,因为他没有被实例化。

blank

blank表示一个字符串的内容是空白字符。判断字符串是否为空白字符可以使用StringUtils类中的工具方法isBlank。示例代码如下:

public class Example {
    public static void main(String[] args) {
        // Blank(空白)
        String str2 = "   ";
        if (str2.isBlank()) {
            System.out.println("字符串为空白");
        }
    }
}

Blank(空白)是指一个字符串类型的值或变量只包含空格字符 (whitespace),而没有其他可见字符。示例:

String str = "   ";
System.out.println(str.isBlank());  // 输出: true

String str2 = "  Hello  ";
System.out.println(str2.isBlank());  // 输出: false

需要注意的是,在Java 11之前是没有isblank()方法的。如果你正在使用早期版本的Java,应该使用trim()方法来去掉字符串两端的空格,并检查结果是否为空。例如:

public class Demo {
    public static void main(String[] args) {
        String str = "  ";
        if (str.trim().isEmpty()) {
            System.out.println("This string is blank");
        }
    }
}

上述代码也会输出"This string is blank",因为变量str经过trim()方法处理后变成了一个空字符串。

注意:blank只适用于字符串类型(String),对于其他类型的值或变量,它没有定义。

小结:

(1)在Java中,empty表示一个字符串的长度为0,也就是没有任何字符;而对于Java集合,empty表示集合不包含任何元素

(2)当说一个对象为null时,意味着该对象引用指向的内存地址没有实际对象存在,即没有被初始化或者已经被显式地赋值为null。

(3)blank表示一个字符串的长度大于0,但是只包含不可见的空白字符,没有其他有效字符。在Java 11及以上版本中,String类新增了isBlank()方法来判断一个字符串是否为空白,即长度大于0但只包含空格。

为了更好地理解这些概念和区别,以下是一些示例代码。

public class Demo {
    public static void main(String[] args) {
        String emptyStr = "";
        String nullStr = null;
        String blankStr = "  ";
 
        // 判断empty字符串
        if (emptyStr.isEmpty()) {
            System.out.println("This string is empty");
        }
 
        // 判断null字符串
        if (nullStr == null) {
            System.out.println("This string is null");
        }
 
        // 判断blank字符串
        if (blankStr.isBlank()) { // 注意: Java 11之前是没有isblank()方法的
            System.out.println("This string is blank");
        }
    }
}

上述代码会输出"This string is empty"和"This string is blank",因为变量emptyStr是一个空字符串,变量blankStr包含两个空格。

区别与联系
(1)null是一个空对象,在内存中是不存在的,null调用字符串方法会抛出异常。
(2)““是一个字符串(String).它在内存中是存在的.它可以使用Object对象中的方法(如””.toString();“”.equals()) 。

Java如何判空

判断字符串是否为空的方法

1.直观的:

if(s == null ||"".equals(s));    //先判断是否对象,再判断是否是空字符串

2.比较字符串长度, 效率高, 比较绕:

if(s == null || s.length() <= 0);

3.效率和方法三几乎相等, 但出于兼容性考虑,不建议此方法.

if(s == null || s.isEmpty());

4.看起来高大上的:

if(StringUtils.isNotBlank(str))    //判断字符串不为空
if(StringUtils.isBlank(str))    //判断字符串为空

List判空

isEmpty() 方法是一个通用的方法,可以用于所有实现了 java.util.Collection 接口的类(如 List、Set 等)。如果集合中没有任何元素,则返回 true;否则返回 false。

import java.util.ArrayList;
import java.util.List;
 
public class Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        System.out.println(list.isEmpty()); // 输出 true
 
        list.add("apple");
        System.out.println(list.isEmpty()); // 输出 false
    }
}

以上代码创建了一个空的 ArrayList,并使用 isEmpty() 方法检查它是否为空。然后在列表中添加了一个元素,再次使用 isEmpty() 方法进行检查。第一次输出为 true,因为列表中没有元素;第二次输出为 false,因为列表中有一个元素。

Map判空

Map可以通过以下几种方式来判断是否为空:

  1. 使用 isEmpty() 方法:Map 提供了一个 isEmpty() 方法,如果 Map 中没有任何映射关系,则返回 true。
import java.util.HashMap;
import java.util.Map;
 
public class Demo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        System.out.println(map.isEmpty()); // 输出 true
 
        map.put("key", "value");
        System.out.println(map.isEmpty()); // 输出 false
    }
}
  1. 判断 Map 的大小:使用 size() 方法获取 Map 中键值对的数量,如果为 0,则说明 Map 为空。
import java.util.HashMap;
import java.util.Map;
 
public class Demo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        System.out.println(map.size() == 0); // 输出 true
 
        map.put("key", "value");
        System.out.println(map.size() == 0); // 输出 false
    }
}
  1. 判断 Map 中的键集合是否为空:使用 keySet() 方法获取 Map 中所有键的集合,然后判断集合是否为空。
import java.util.HashMap;
import java.util.Map;
 
public class Demo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        System.out.println(map.keySet().isEmpty()); // 输出 true
 
        map.put("key", "value");
        System.out.println(map.keySet().isEmpty()); // 输出 false
    }
}

需要注意的是,以上三种方法都可以判断 Map 是否为空,但建议根据实际情况选择最适合的方法。如果只需要知道 Map 是否为空,直接使用 isEmpty() 方法;如果需要执行其他操作(如遍历、删除等),则可能需要获取 Map 的大小或键集合。

鸣谢:https://blog.csdn.net/cnds123/article/details/131800667
https://chenyunzhi.blog.csdn.net/article/details/131432701
https://blog.csdn.net/xijinno1/article/details/132123472

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值