一直以来对String的这三个空挺晕的,刚好同事问我,我也学习下。
从别人博客上看到的是这样的:
isEmpty()
分配了内存空间,值为空,是绝对的空,是一种有值(值 = 空)
""
分配了内存空间,值为空字符串,是相对的空,是一种有值(值 = 空字串)
null
是未分配内存空间,无值,是一种无值(值不存在)
然而我还是挺晕忽 所以写了个demo验证下~
@Override
protected 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和""是否有何不同之处,有知道的小伙伴希望可以评论告知,谢谢~)