1. 程式人生 > >JDK7新增Objects方法介紹(同時包含JDK8新新增的方法)

JDK7新增Objects方法介紹(同時包含JDK8新新增的方法)

轉自:https://blog.csdn.net/xinghuo0007/article/details/78895577

前言:

JDK7裡面新增的Objects類,該類的主要用途是將操作物件的一切常用操作進行的封裝。包括hashCode、equals等。
本文是以java8版本介紹Objects類,所以也會介紹一下java8新增的方法。下面進入正題:

知識點一:Objects類簡介:

/**
 * This class consists of {@code static} utility methods for operating
 * on objects.  These utilities include {@code
null}-safe or {@code * null}-tolerant methods for computing the hash code of an object, * returning a string for an object, and comparing two objects. * * @since 1.7 */
大概翻譯: 本類由一些操作物件的靜態工具方法構成,這些工具方法包括了非空檢查、方法的非空引數檢查、 比較物件的hashCode、為物件返回一個字串表示、比較兩個物件 從j.7開始新增該類

知識點二:Objects特點

1.
該類是使用final修飾,不能被繼承 2.該類的構造方法被私有化(使用private修飾),不能直接建立物件 3.該類中所有的方法都是靜態方法,可以使用型別直接呼叫(對應2,該類不需要建立物件)

原始碼截圖:

這裡寫圖片描述

知識點三:Objects內方法介紹

//比較兩個物件是否相等(首先比較記憶體地址,然後比較a.equals(b),只要符合其中之一返回true)
public static boolean equals(Object a, Object b);

//深度比較兩個物件是否相等(首先比較記憶體地址,相同返回true;如果傳入的是陣列,則比較陣列內的對應下標值是否相同)
public
static boolean deepEquals(Object a, Object b); //返回物件的hashCode,若傳入的為null,返回0 public static int hashCode(Object o); //返回傳入可變引數的所有值的hashCode的總和(這裡說總和有點牽強,具體參考Arrays.hashCode()方法) public static int hash(Object... values); //返回物件的String表示,若傳入null,返回null字串 public static String toString(Object o) //返回物件的String表示,若傳入null,返回預設值nullDefault public static String toString(Object o, String nullDefault) //使用指定的比較器c 比較引數a和引數b的大小(相等返回0,a大於b返回整數,a小於b返回負數) public static <T> int compare(T a, T b, Comparator<? super T> c) //如果傳入的obj為null丟擲NullPointerException,否者返回obj public static <T> T requireNonNull(T obj) //如果傳入的obj為null丟擲NullPointerException並可以指定錯誤資訊message,否者返回obj public static <T> T requireNonNull(T obj, String message) -----------------------------以下是jdk8新增方法--------------------------- //判斷傳入的obj是否為null,是返回true,否者返回false public static boolean isNull(Object obj) //判斷傳入的obj是否不為null,不為空返回true,為空返回false (和isNull()方法相反) public static boolean nonNull(Object obj) //如果傳入的obj為null丟擲NullPointerException並且使用引數messageSupplier指定錯誤資訊,否者返回obj public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)

知識點四:案例

下面簡單測試了幾個方法:

package cn.cupcat.java8;

import org.junit.Test;

import java.util.Comparator;
import java.util.Objects;

/**
 * Created by xy on 2017/12/25.
 */
public class ObjectsTest {

    /**
     *  因為Objects類比較簡單,所以只用這一個測試用例進行測試
     * */
    @Test
    public void equalsTest(){
        String str1 = "hello";
        String str2 = "hello";
        //傳入物件
        //Objects.equals(str1, str2) ?  true
        boolean equals = Objects.equals(str1, str2);
        System.out.println("Objects.equals(str1, str2) ?  "+ equals);



    }
    @Test
    public void deepEqualsTest(){
        String str1 = "hello";
        String str2 = "hello";
        //傳入物件
        boolean deepEquals = Objects.deepEquals(str1, str2);
        //Objects.deepEquals(str1, str2) ?  true
        System.out.println("Objects.deepEquals(str1, str2) ?  "+ deepEquals);
        int[] arr1 = {1,2};
        int[] arr2 = {1,2};
        //傳入陣列
        deepEquals = Objects.deepEquals(arr1, arr2);
        //Objects.deepEquals(arr1, arr2) ?  true
        System.out.println("Objects.deepEquals(arr1, arr2) ?  "+ deepEquals);
    }
    @Test
    public void hashCodeTest(){
        String str1 = "hello";

        //傳入物件
        int hashCode = Objects.hashCode(str1);
        //Objects.hashCode(str1) ?  99162322
        System.out.println("Objects.hashCode(str1) ?  "+ hashCode);

        //傳入null
        hashCode = Objects.hashCode(null);
        //Objects.hashCode(null) ?  0
        System.out.println("Objects.hashCode(null) ?  "+ hashCode);


    }

    @Test
    public void hashTest(){

        int  a  = 100;

        //傳入物件
        int hashCode = Objects.hashCode(a);
        //Objects.hashCode(str1) ?  100
        System.out.println("Objects.hashCode(str1) ?  "+ hashCode);

        //輸入陣列
        int[] arr = {100,100};
        hashCode = Objects.hash(arr);
        //Objects.hashCode(arr) ?  1555093793
        System.out.println("Objects.hashCode(arr) ?  "+ hashCode);
    }


    @Test
    public void compareTest(){
        int a = 10;
        int b = 11;
        int compare = Objects.compare(a, b, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        });
        // compare = -1
        System.out.println(" compare = "+ compare);

    }

    @Test
    public void requireNonNullTest(){
        String test = null;
        //java.lang.NullPointerException
       // String s = Objects.requireNonNull(test);

        //java.lang.NullPointerException: 這是空指標異常提示的資訊
        //String s = Objects.requireNonNull(test, "這是空指標異常提示的資訊");


        //java.lang.NullPointerException: 我是返回的異常資訊
        String s = Objects.requireNonNull(test,()->"我是返回的異常資訊");
    }
}

知識點五:總結

Objects類給我們提供了一些常用的操作物件的方法,我們可以直接使用,這是非常方便的。尤其是requireNonNull()方法,
在我們寫方法時需要判斷傳入的引數是否為null可以使用該方法及其方便。