public static void main(String[] args) {
// TODO Auto-generated method stub
String a = null;
System.out.print("abc".equals(a)); }
        以上程序不会报错!
     public static void main(String[] args) {
// TODO Auto-generated method stub
String b = null;
System.out.print(b.equals("abc")); }
    此程序会报空指异常。
    也就是说用equals()方法时,
     例如:str1.equals(str2),
         str1的值不可以为null,如果为null则报空指异常
          str2的值可以为null
    
    小弟非常不解请各位指教!

解决方案 »

  1.   

    str1.equals(str2)里面,str1是调用方法的实例,为空的时候去调方法肯定报错。
    而str2是方法参数,为空不报错是因为equals方法里面没有对str2这个参数的方法调用,如果有的话也会报错
    总之空对象调方法就会报错
      

  2.   

    String str1 = null;
    这样定义,str1被初始化了,是字符窜对象,如果是为什么不可以用str1调方法?
      

  3.   

    唉。看看,你0分问问题。回复的就少了吧。咋理解勒。你就像null啥都不是,啥都不是的这么一个东西调用equals方法肯定有问题啦。因为null啥都不是,啥都不是的东东,肯定不能调用其他的方法啦。如果前面的不为空呢,那么恭喜,前面的这个东东就有equals方法,他就可以正常调用了。只是比较对象是null。结果是false罢了 。
      

  4.   

    String str1 = null;
    这就是初始化啊?呵呵。只是定义了一个str1对象,没有初始化。null是字符串吗?
      

  5.   

    当一个引用调用方法时,并不是根据引用的类型去调用而是根据它实际所指向的对象的类型,如果String str=null,那str这个引用就不知道该去调用谁的equals方法,所以会报错。而第二个,则使根据'abc'去调用字符串的equals的方法。