admin 管理员组文章数量: 887007
Java判断String是否为空或不为空(并且equals的好的写法,不报空指针)
首先澄清一个概念:
String str;
if(str == null || str.equals(" ")){
}
- 1
- 2
- 3
str == null 说明str还未指向一个特定的字符串对象,此时谈不上是否为空。str = “”;说明str是个空字符串,只不过长度为0;
字符串判断空的几种写法:
//①.最多人使用的一个方法, 直观, 方便, 但效率很低;
if (str == null || "".equals(str)) {
} //②.比较字符串长度,效率高,是最好的一个方法;
if (str == null || str.length() <= 0) {
}//③.JavaSE6.0 才开始提供的方法, 效率和方法二几乎相等,但出于兼容性考虑, 推荐使用方法二;
if (str == null || str.isEmpty()) {
}
//④.这是一种比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多;
if (str == null || str == "") {
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
相应的不为空的判断加上 “非”(!)的判断即可。
2.
首先看个例子
public static void main(String[] args) {
String a=null;
if("aa".equals(a))//这种情形,不出现空指针异常
//if(a.equals("aa"))//出现空指针异常
{
System.out.println(true);
}
else {
System.out.println(false);
}
}
面的两句不同的比较语句测试,第一句不出现空指针异常,第二句出现。
所以在变量和常量比较的时候,一般把常量放在前面。为了避免空指针异常。
但是我的问题是:变量在前时候,读到变量,变量为空,就出现异常了。
为什么变量在后时候,a变量就不用读了吗?既然要比较肯定也要读啊,问题
只是先后的问题。为什么放在后面就就不报空指针呢?
看了一下string类的equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
源码我看了一下,也明白,但是在源码中如果anobject为空的时候,就不会出现空指针异常吗 ?
后来经过一番讨论后,我得出的结论是这样的:
问题是出现在调用方法上了。因为null值,并不是一个String对象。而你通过声明的String对象引用去 调用了String对象的实例方法。当然不可以了。null调用了方法。
所以系统报出了,空指针异常。
本文标签: Java判断String是否为空或不为空(并且equals的好的写法,不报空指针)
版权声明:本文标题:Java判断String是否为空或不为空(并且equals的好的写法,不报空指针) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732353424h1533749.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论