java中equals会报空指针吗,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调用了方法。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值