从别人博客上看到的是这样的:
isEmpty()
分配了内存空间,值为空,是绝对的空,是一种有值(值 = 空)
""
分配了内存空间,值为空字符串,是相对的空,是一种有值(值 = 空字串)
null
是未分配内存空间,无值,是一种无值(值不存在)
然而我还是挺晕忽 所以写了个demo验证下~
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(.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 (()){ Log.e("testNull", "isEmpty"); } if (("")){ Log.e("testNull", "引号"); } Log.e("testNull", "----------------"); }
由于只会玩Android,就写了个Android的demo。效果一样啦~
打log结果为:
02-15 14:41:10.655 31875-31875/ E/testNull: isEmpty
02-15 14:41:10.655 31875-31875/ E/testNull: 引号
02-15 14:41:10.655 31875-31875/ E/testNull: ----------------
02-15 14:41:10.655 31875-31875/ E/testNull: isEmpty
02-15 14:41:10.655 31875-31875/ E/testNull: 引号
02-15 14:41:10.655 31875-31875/ E/testNull: ----------------
02-15 14:41:10.655 31875-31875/ E/testNull: null
再然后str就报空指针错误了~这里可以发现好像isEmpty和""的效果是一样滴啊。
又看了下isEmpty的源码:
public boolean isEmpty() { return count == 0; }就是说只要String的文本数量为0就返回true,而""里面文本数量就是为0。
综上所述:
null是未分配内存空间的“空”~
isEmpty和引号这两个“空”与null相对(即它们 != null),且都是已分配内存(好像差不多一个意思)
(PS:尚不清楚isEmpty和""是否有何不同之处,有知道的小伙伴希望可以评论告知,谢谢~)