Java中String类的isEmpty()方法、" "以及null的区别
今天在做一道题的时候遇到了这么一个问题,“如果用户输入空字符串而不是名字,程序应在屏幕上显示数据并终止运行。”(最后有说明解决办法)
刚开始的时候我是这么判断的if(name.isEmpty()) break;
,结果显示报错。然后再次使用if(name.equals(" ")) break;
, 依旧结果显示报错且差不多相同。再用if(name = null) break;
,显然输入名字后和不输入名字都可以显示,只是null的时候显示空而已,但是不会报错。
按照上述只用其中一种办法是不能完成该题的要求的,然后在别人的博客上看到了这样的结论:
isEmpty() | 分配了内存空间,值为空,是绝对的空,是一种有值(值 = 空) |
---|---|
" " | 分配了内存空间,值为空字符串,是相对的空,是一种有值(值 = 空字串) |
null | 是未分配内存空间,无值,是一种无值(值不存在) |
对于此结果,我验证了一下:
package su;
public class text {
public static void main(String[] args) {
String a = new String();
String b = "";
String c = null;
if (a.isEmpty()) {
System.out.println("String a = new String");
}
if (b.isEmpty()) {
System.out.println("String b = \"\"");
}
if (c == null) {
System.out.println("String c =null");
}
if (null == a) {
System.out.println("String a =null");
}
if (a == "") {
System.out.println("a = ''");
}
if (a.equals("")){
System.out.println("a = ''");
}
}
}
结果显示:
String a = new String
String b = ""
String c =null
a = ''
验证结果:上述结论正确,但还需要注意a.equals(" ")与a.isEmpty( )结果一致(除了内存地址不一样),而且isEmpty( )不能用来判断null,会报空指针异常
对于开头说的那个题目要求,最后是这样完成的
if (name ==null || name.isEmpty()) break;
或者
if (name ==null || name.equals()) break;
(ps:目前处于学习阶段,如有错误或见解望评论告知,谢谢惹!)