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和""是否有何不同之处,有知道的小伙伴希望可以评论告知,谢谢~)
  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值