Java中String类的isEmpty方法null以及""的区别
Posted tangyongathuse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中String类的isEmpty方法null以及""的区别相关的知识,希望对你有一定的参考价值。
参考:http://blog.csdn.net/violetjack0808/article/details/50668195
内容:
一直以来对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和""是否有何不同之处,有知道的小伙伴希望可以评论告知,谢谢~)
以上是关于Java中String类的isEmpty方法null以及""的区别的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NoSuchMethodError: java.lang.String.isEmpty()Z
从源码分析java.lang.String.isEmpty()