One - One Code All

Blog Content

java中判断空字符串和null的判断方法

Java   2020-03-29 18:02:25

String的null或空值的判断处理


isEmpty() 分配了内存空间,值为空,是绝对的空,是一种有值(值 = 空)

"" 分配了内存空间,值为空字符串,是相对的空,是一种有值(值 = 空字串)

null 是未分配内存空间,无值,是一种无值(值不存在)


简单总结几个方法:


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))    //判断字符串为空

 

判断一个String为空的安全方法,string == null || string.isEmpty()


isEmpty()完全等同于string.length()==0

如果String对象本身是null,即字符串对象的引用是空指针,那么使用string.isEmpty()会报NullPointerException


例子:


//字符串对象的引用a是有效指针,字符串对象a分配内存空间,并且指向的内容为空字符串(在java没有指针的说法,但这样理解更好)

String a = new String();

//字符串对象的引用b是有效指针,字符串对象b分配内存空间,并且指向的内容为空字符串

String b = "";

//字符串对象的引用c是空指针, 字符串对象c未分配内存空间

String c = null;


isEmpty()使用的前提是字符串对象已经被分配了内存空间,如果对象没有被分配空间而使用isEmpty()报空指针错误,isEmpty等同于string.length()==0,比如对字符串对象的引用c: c.isEmpty(),报NullPointException,而字符串对象的引用a,b都不会。


 

一、基本知识

 String str1 = null;   

str1引用为空,它没有地址,它是一个没有被实例化的对象


String str2 = "";

str2引用为空字符串,它有地址,它是被实例化的对象,值为空而已。

 

二、实际问题


在开发过程中,常常碰到过下面这些错误的用法:

1,错误用法一:


if (name == "") {

//do something

}


2,错误用法二:


if (name.equals("")) {

//do something

}


3,错误用法三:


if (!name.equals("")) {

//do something

}


我们来解说一下:

上述错误用法1是初学者最容易犯,也最不容易被发现的错误,因为它们的语法本身没问题,Java编译器编译时不报错。但这种条件可能在运行时导致程序出现bug,永远也不会为true,也就是时说,if块里的语句永远也不会被执行。


上述用法二,用法三 的写法,是包括很多Java熟手也很容易犯的错误,它们的写法本身没错,但是,少了一个null判断的条件,试想,如果name=null的情况下,会发生什么后果呢?后果是,你的程序将抛出NullPointerException异常,系统将被挂起,不再提供正常服务。

当然,如果之前已经对name作了null判断的情况例外。


正确的写法应该先加上name != null的条件,如例:



if (name != null && !name.equals("")) {

//do something

}

或者


if (!"".equals(name)) {//将""写在前头,这样,不管name是否为null,都不会出错。

//do something

}




三、判断是否为空

1、如果是string对象是null,用 == 来判断,否则会抛出异常 


java.lang.NullPointerException

2、如果是空字符串,用来equals() 判断,


str.equals("")

“ == ”操作在对String这种引用数据类型来说,比较的是地址


“equals()"判断的是内容



3、综合来说,判断字符串是否为空


 if (context != null && !context.trim().equals("")) {

trim():返回一个去掉前后空格之后的 字符串(leading and trailing whitespace)


 


四、判断是否相等

str1.equals(str2)

“ == ”操作在对String这种引用数据类型来说,比较的是地址


“equals()"判断的是内容


 !String.equlas("String");



上一篇:Java判断对象是否为空
下一篇:maven 中添加postgresql依赖,阿里云镜像,add as library

The minute you think of giving up, think of the reason why you held on so long.