您的位置:首页 > 其它

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

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

 

 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: