equals方法避免空指针的比较方法

首先看个例子


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调用了方法。

所以系统报出了,空指针异常。

你可能感兴趣的:(equals方法避免空指针的比较方法)