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和""是否有何不同之处,有知道的小伙伴希望可以评论告知,谢谢~)
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募