如何比较两个有可能为null的实例
       以前在写程序的时候,碰到需要比较两个有可能为null的实例时,为了避免出现NullPointerException,经常用这样的一段代码来比较:
![]() Object obj1 = "abc";
     Object obj1 = "abc";
![]() Object obj2 = "cde";
     Object obj2 = "cde";
![]() 
    
![]() if ((obj1 == null && obj2 == null) || (obj1 != null && obj1.equals(obj2))
    if ((obj1 == null && obj2 == null) || (obj1 != null && obj1.equals(obj2)) 
![]() || (obj2 != null && obj2.equals(obj1))) {
        || (obj2 != null && obj2.equals(obj1))) {
![]() System.out.println("equals");
       System.out.println("equals");
![]() }
     }
这样的程序,读起来真是挺拗口。我一直没有想到什么好的方法解决这个问题,直到今天在看到JDK的AbstractList源码的equals方法的实现时,看到这一段:
![]() if (!(o1==null ? o2==null : o1.equals(o2)))
        if (!(o1==null ? o2==null : o1.equals(o2)))
![]() return false;
        return false;
原来用三元运算符可以很好的解决这个问题,呵呵,我前面的程序可以改写成:
![]() Object obj1 = "abc";
     Object obj1 = "abc";
![]() Object obj2 = "cde";
     Object obj2 = "cde";
![]() 
    
![]() if (obj1 == null ? obj2 == null : obj1.equals(obj2))
    if (obj1 == null ? obj2 == null : obj1.equals(obj2))
![]() System.out.println("equals");
       System.out.println("equals");
真是简洁多了!![]() 
 Object obj1 = "abc";
     Object obj1 = "abc"; Object obj2 = "cde";
     Object obj2 = "cde"; 
     if ((obj1 == null && obj2 == null) || (obj1 != null && obj1.equals(obj2))
    if ((obj1 == null && obj2 == null) || (obj1 != null && obj1.equals(obj2))  || (obj2 != null && obj2.equals(obj1))) {
        || (obj2 != null && obj2.equals(obj1))) { System.out.println("equals");
       System.out.println("equals"); }
     }这样的程序,读起来真是挺拗口。我一直没有想到什么好的方法解决这个问题,直到今天在看到JDK的AbstractList源码的equals方法的实现时,看到这一段:
 if (!(o1==null ? o2==null : o1.equals(o2)))
        if (!(o1==null ? o2==null : o1.equals(o2))) return false;
        return false;原来用三元运算符可以很好的解决这个问题,呵呵,我前面的程序可以改写成:
 Object obj1 = "abc";
     Object obj1 = "abc"; Object obj2 = "cde";
     Object obj2 = "cde"; 
     if (obj1 == null ? obj2 == null : obj1.equals(obj2))
    if (obj1 == null ? obj2 == null : obj1.equals(obj2)) System.out.println("equals");
       System.out.println("equals");真是简洁多了!
 
 
                    
                 
 
        
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号