我们在做字符串判断时一般会:
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()方法时会出现空指针异常!!!