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

一直以来对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和""是否有何不同之处,有知道的小伙伴希望可以评论告知,谢谢~)

    推荐阅读