equals方法避免空指针的比较方法
2016-03-03 11:48
387 查看
首先看个例子
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调用了方法。
所以系统报出了,空指针异常。
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调用了方法。
所以系统报出了,空指针异常。
相关文章推荐
- 闭包 转
- Apache Tomcat 负载均衡 主备切换
- C# 多态性
- erlang game
- 【SVN Working copy is too old (format 10, created by Subversion 1.6)】解决方式
- App Store 升级问题
- 记录--指定路径复制文件到另一个路径
- iOS 设备获取唯一标识符汇总
- 聚合类
- tomcat实现https登录
- AndroidGPS获取当前经纬度坐标
- Linux运维之道1,2章
- IOS如何在Host App 与 App Extension 之间发送通知
- hibernate Cacheable
- Leetcode:202. Happy Number(JAVA)
- 几种等等概率抽样方法
- [Android 性能优化系列]布局篇之减少你的界面层级
- 辗转相除法
- 12种排序算法详解
- C语言面试题(1)