关于Java.util.Objects的学习
前几天看阿里开发手册,我才知道原来除了Object类,还有一个Objects的类,果然还是需要不断的学习呀,好了,话不多说,进入正题。
首先说一说Object与Objects的区别:
Object 是 Java 中所有类的基类,位于java.lang包。
Objects 是 Object 的工具类,位于java.util包。jdk1.7引入的工具类,被final修饰不能被继承,拥有私有的构造函数。它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或
null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
其次,也是我主要的目的,就是来比较一下这两个类中的equals方法
equals方法是判断两个对象是否相等。
1、 在比较两个对象的时候,Object.equals方法容易抛出空指针异常。
public class EqualsTest { public static void main(String[] args) { String str = null; System.out.println("hello".equals(str)); } }
这样写是没有问题的,但是我这么写
public class EqualsTest { public static void main(String[] args) { String str = null; System.out.println(str.equals("hello")); } }
它就会报一个空指针异常 ,所以使用Object中的equals方法时应使用常量或确定有值的对象来调用equals方法,如 "hello".equals(str)
注意如果是两个变量比较的时候,都需要加非空判断。
2、看完上面,再来看看Objecs中的equals方法
Objects.equals方法中已经做了非空判断,所以不会抛出空指针异常,它是null-save空指针安全的,而且也可以简化代码。源码如下:
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
看完源码,再实际用一下它
public class EqualsTest { public static void main(String[] args) { String str = null; System.out.println(Objects.equals(str, "hello")); } }
用这种方法,就算是比较两个对象也不需要我们自己来做非空判断了。