基础巩固15-java 中的NULL,空字符串,空格串的区别与联系

本文详细解析了Java中null、空字符串()和空格串( )的区别,包括它们的内存分配情况及如何正确判断字符串是否为空。通过实例展示了isEmpty和isBlank方法的使用,以及在实际编程中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、根本区别
“” :空字符串,分配了内存 ,字符串的内容是空(比喻:存在一个杯子,但是杯子里面的内容为空,长度为0)
null :NULL,未分配内存(比喻:杯子都没有,没有长度)
" " :空格串,分配了内存,字符串的内容是一个空格(比喻:存在一个杯子,杯子里面的内容是一个空格,长度为1)
举例如下:

package com.javabase.javabase.nullAndNullString;

import org.junit.Test;

/**
 * @Author ShawnYang
 * @Date 2019-10-17 9:25
 * @Description TODO
 * 修改人:
 * 修改时间:
 * 修改备注:
 */
public class NullAndNullStringTest {

    @Test
    public void test() {
        String str1 = ""; //空字符串      str1.length() 等于 0

        String str2 = null; //NULL

        String str3 = " "; //空格串,本质上和其他字符串一样,只是这个字符串的内容是空格         str2.length() 等于 1

//      1 str1在堆内存中存在,可以调用indexOf 方法
        System.out.println(str1.length());//0
        System.out.println(str1.indexOf('d'));// 结果:-1
        System.out.println(str1.indexOf(' '));// 结果:-1


//      2 str2在堆内存中不存在,无法调用方法,调用indexOf的时候会报空指针异常
//      System.out.println(str2.length());// 结果:NullPointerException
//      System.out.println(str2.indexOf('d'));// 结果:NullPointerException
//      System.out.println(str2.indexOf(' '));//结果:NullPointerException

//      3 str3 本质上和其他字符串一样,只是这个字符串的内容是空格
        System.out.println(str3.length());//1
        System.out.println(str3.indexOf('d'));//结果-1
        System.out.println(str3.indexOf(' '));//结果0
    }
}

由此可见下面的isEmpty 和isBlank的区别
isEmpty的作用:如果str 是null 或者空字符串 判定 该字符串为空, 如果str是空格串,则判定该字符串不为空
isBlank的作用:如果str是null或者空字符串或者空串,判定该字符串为空,否则不为空

/**
	 * 判断字符串是否为空
	 */
    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }

	/**
	 * 判断字符串是否不为空
	 */
    public static boolean isNotEmpty(String str) {
        return !StringUtils.isEmpty(str);
    }

	/**
	 * 判断字符串是否为空
	 */
    public static boolean isBlank(String str) {
        int strLen;
        if (str == null || (strLen = str.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if ((Character.isWhitespace(str.charAt(i)) == false)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断字符串是否不为空
     */
    public static boolean isNotBlank(String str) {
        return !StringUtils.isBlank(str);
    }

二、在java中的使用区别
1 NULL 和空字符串的联合使用

        //String的null或空值的判断处理:方法一
        String name=null;
        if (name == null&&name.equals("")) {
            //do something
        }
        //String的null或空值的判断处理:方法二
        //将""写在前头,这样,不管name是否为null,都不会出错。
        if (name == null&&"".equals(name)) {
            //do something
        }

2 空格串的使用区别
要判读String是否为空字符串,比较简单,只要判断该String的length是否为0就可以,或者直接用方法isEmpty()来判断。
但很多时候我们也会把由一些不可见的字符组成的String也当成是空字符串(e.g, space, tab, etc),这时候就不能单用length或isEmpty()来判断了,因为technically上来说,这个String是非空的。这时候可以用String的方法trim(),去掉前导空白和后导空白,再判断是否为空。
如下所示

        //注意这里的isEmpty 是String的原生方法,只是return value.length == 0;
        if(str3.isEmpty()){
            System.out.println("str3 is Empty");
        }else{
            System.out.println("str3 is not Empty");
        }

        if(str3.trim().isEmpty()){
            System.out.println("str3 is Empty");
        }else{
            System.out.println("str3 is not Empty");
        }

或者用上面的 自定的isEmpty或者isBlank 方法

补充:java中判断字符串为空的四种方法
以下是java 判断字符串是否为空的四种方法

方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null || s.equals(""));

方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法: if(s == null || s.length() == 0);

方法三: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二. if(s == null || s.isEmpty());

方法四: 这是一种比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多: if (s == null || s == “”);

参考:参考一 参考二

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值