为什么我们在判断字符串不为null后还要判断字符串长度大于0?

文章讨论了在Java中字符串不为null并不意味着长度大于0。空字符串是一个长度为0的字符串,占用内存,而null是空引用,不分配内存。在进行字符串判断时,通常应先检查是否为null,以避免空指针异常。顺序不能颠倒,因为对null调用length()方法会导致异常。
摘要由CSDN通过智能技术生成

我们在做字符串判断时一般会:

if (s != null && s.length() > 0) {

        }

但是我就在想,字符串不为空了,那么他一定有值,字符串长度不就大于0吗,所以s.length()>0是不是有点多余?

我的思维误区是 :字符串不为null,长度必大于0

并不是这样的,看下面:

String s1;      //
String s2=null; //s2.length() 空指针异常
String s3="";   //s3.length() = 0,s3!=null
String s4=" ";  //s2.length() = 1

字符串s3是一个空串,s3!=null,但是长度为0

s != null      过滤null
s.length() >0  过滤空字符串,也就是s3那种

区分空串和null

空字符串“”

1、类型:“”是一个空字符串(String)长度为0占内存在内存中分配一个空间,可以使用Object对象中的方法。(例如:“”.toString()等)

2、内存分配:表示声明一个字符串类型的引用,其值为“”空字符串,这个引用指向str1的内存空间。

null

1、类型:null是空引用表示一个对象的值没有分配内存,调用null的字符串的方法会抛出空指针异常。(例如:str1.endsWith(str2); java.lang.NullPointerException)

2、内存分配:表示声明一个字符串对象的引用,但指向null,也就是说没有指向任何内存空间。

例: String str1 = ""; //str1对应一个空串,声明对象的引用
String str2 = null;      //str2引用为空

值得一提的是,做判断通常要先判断是否为null,再判断是否为空串,即长度是否大于0,

如果我先判断是否空串,再判断是否为null,可不可以呢?

不可以,如果一个字符串s=null;当执行s.length()方法时会出现空指针异常!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值