Java中String类的isEmpty方法、null以及""的区别

来源:互联网 发布:jquery.base64.js 编辑:程序博客网 时间:2024/05/17 07:18
一直以来对String的这三个空挺晕的,刚好同事问我,我也学习下。

从别人博客上看到的是这样的:
    isEmpty()
        分配了内存空间,值为空,是绝对的空,是一种有值(值 = 空)  
    ""
        分配了内存空间,值为空字符串,是相对的空,是一种有值(值 = 空字串)  
    null
        是未分配内存空间,无值,是一种无值(值不存在)


然而我还是挺晕忽 所以写了个demo验证下~

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    String a = new String();    String b = "";    String c = null;    testString(a);    testString(b);    testString(c);}private void testString(String str){    if (str == null){        Log.e("testNull", "null");    }    if (str.isEmpty()){        Log.e("testNull", "isEmpty");    }    if (str.equals("")){        Log.e("testNull", "引号");    }    Log.e("testNull", "----------------");}

由于只会玩Android,就写了个Android的demo。效果一样啦~
打log结果为:
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: isEmpty
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: 引号
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: ----------------
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: isEmpty
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: 引号
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: ----------------
02-15 14:41:10.655 31875-31875/uding.testanimation E/testNull: null

再然后str就报空指针错误了~这里可以发现好像isEmpty和""的效果是一样滴啊。
又看了下isEmpty的源码:

public boolean isEmpty() {    return count == 0;}
就是说只要String的文本数量为0就返回true,而""里面文本数量就是为0。

综上所述:
    null是未分配内存空间的“空”~
    isEmpty和引号这两个“空”与null相对(即它们 != null),且都是已分配内存(好像差不多一个意思)

(PS:尚不清楚isEmpty和""是否有何不同之处,有知道的小伙伴希望可以评论告知,谢谢~)
1 0
原创粉丝点击