关于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"));
        }
}

 

             用这种方法,就算是比较两个对象也不需要我们自己来做非空判断了。

posted @ 2019-12-11 16:23  是程序媛吖  阅读(556)  评论(0编辑  收藏  举报