Java中String类的isEmpty()方法、“ “以及null的区别

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:目前处于学习阶段,如有错误或见解望评论告知,谢谢惹!)

你可能感兴趣的:(java学习,java)