日期:2014-05-20  浏览次数:20745 次

为什么就可以避免空指针
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方法怎么写的就知道了!
------解决方案--------------------
当然了,你对null调用方法,当然会报异常了。
------解决方案--------------------
源码主要是两个if语句,当为null的时候,第一个 if (this == anObject)为false不会进去。
第二个  if (anObject instanceof String)也为false,也不会进去执行里面的代码,然后,你就看到了,然后就直接返回false了。所以不会报错null指针啊。
------解决方案--------------------
null是一个关键字,用来标识一个不确定的对象.所以null不是String对象,不具有String的方法。null instanceof String当然也是false。
首先,null放前面 null.equals()必然是空指针异常。
“aaa”.equals(null);在equals方法中,是这么定义的
 public boolean equals(Object anObject) {

         if (anObject instanceof String) {
              }else {