String类的isEmpty()、null和“”都有空的含义,但三者是不同的。
demo代码:
为了更清晰的看三者的区别,可以写一个demo,如下:
要注意如果string为
null
,不能对其调用isEmpty
方法和equals
方法,会报错:
package Tests;
/**
* @author zhangjie
* @date 2020/9/13
*/
public class StringEmptyDemo {
public static void main(String[] args){
String a = new String();
String b = "";
String c = null;
testString(a);
testString(b);
testString(c);
String d = "a";
testString(d.substring(0,0));
System.out.println(null+"abc");
System.out.println(c);
}
public static void testString(String string){
if(string == null){
System.out.println("null");
}
if(string != null && string.isEmpty()){
System.out.println("is empty");
}
if(string != null && string.equals("")){
System.out.println("\"\"");
}
System.out.println("————————————————————");
}
}
运行结果:
is empty
""
————————————————————
is empty
""
————————————————————
null
————————————————————
is empty
""
————————————————————
nullabc
null
结论:
String a = new String();
字符串对象的引用a 是有效指针,字符串对象a 分配了内存空间,并且指向的内容为空字符串(在java没有指针的说法,但这样理解更好)
String b = "";
字符串对象的引用b 是有效指针,字符串对象b 分配了内存空间,并且指向的内容为空字符串
String c = null;
字符串对象的引用c 是空指针, 字符串对象c未分配内存空间
总结:
判断一个 String 变量是否是空对象:
使用变量与 null 进行 == 比较,不能使用 equals()、isEmpty()、"" 等进行判断,因为空对象还未被实例化。
判断一个 String 变量是否是空值:
equals("") 方法比较对象的内容是否为空值;
length() == 0 来判断 String 的字符个数是否为0;
isEmpty() 方法来判断 String 对象的字符个数是否为0。
ps:isEmpty的实现原理其实是调用 length() == 0 。
substring后不会为null,而是""
对于 String 的 + 操作符来说,如果有一个操作数是 String,其他操作数会被转换成 String。特别注意,null 与字符串 “XXXX” + 操作会变成 “nullXXXX”。
Java String 的 isEmpty() 与 null 与 “” 区别解析
Java String类的isEmpty(),null的区别