1.Objects.equals的好处使用JDK1.7提供的objects.equals方法可以非常容易地比较对象,并有效地避免复杂的空指针检查,如:
objects.equals('1','1' ); //trueobjects.equals(null,'1' ); //falseobjects.equals('1',null ); //false objects.equals (空,null ); //true 2.Objects.equals中的凹坑有效地避免了空指针问题,但在处理基本数据类型和封装类型的比较时会出现以下意想不到的问题:
Long a=1L; int b=1; system.out.println (objects.equals (b,a ) ); //false system.out.println (objects.equals (a,b ) ); //falsesystem.out.println(a==b ); //true的前两个居然输出了false! 和想象的不一样!
让我们追踪一下源代码:
publicstaticbooleanequals (objecta,Object b ) return ) a==b )|(a!=nulla.equals(b ); }发现: Objects.equals在比较时自动封装基本类型。 也就是说,将int改为Integer,并与使用Long的equals方法进行了比较。 如下所示。
publicbooleanequals(objectobj ) if ) objinstanceoflong ) returnvalue==((long ) obj ).longValue ); } return false; }结果,一个Integer和一个Long,类型不同,直接返回false,真的有洞!
==不是。 会自动开封