深入学习java源码之Objects.deepEquals()与Objects.isNull()

  • Post author:
  • Post category:java

深入学习java源码之Objects.deepEquals()与Objects.nonNull()

不定长度参数

如果一个方法的参数定为不定参数的话,这个参数可以根据参数个数动态生成一个数组,然后传入方法执行。 
不过,不定参数有两个规定:第一,方法的参数列表中最多只有一个不定长度的参数;第二,就是不定长度的数组的位置必须是最后一个参数。不然不能通过编译。 

    public static void main(String[] args) {  
        test("aaa");  
        test("aaa", "bbb");  
        test("aaa", "bbb", "ccc");  
    }  

    public static void test(String arg, String... args) {  
        System.out.println(arg);  
        System.out.println("----------------");  
        for (String s : args) {  
            System.out.println(s);  
        }  
    } 

 

supplier函数式接口

supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,看下面代码

public class TestSupplier {
	private int age;
	
	TestSupplier(){
		System.out.println(age);
	}
	public static void main(String[] args) {
		//创建Supplier容器,声明为TestSupplier类型,此时并不会调用对象的构造方法,即不会创建对象
		Supplier<TestSupplier> sup= TestSupplier::new;
		System.out.println("--------");
		//调用get()方法,此时会调用对象的构造方法,即获得到真正对象
		sup.get();
		//每次get都会调用构造方法,即获取的对象不同
		sup.get();
	}

--------
0
0

Supplier<TestSupplier> sup= TestSupplier::new;每次调用get()方法时才创建对象,且返回的对象不一样

 

 

 

Modifier and Type Method and Description
static <T> int compare(T a, T b, Comparator<? super T> c)

返回0,如果参数都是相同的, c.compare(a, b)其他。

static boolean deepEquals(Object a, Object b)

返回 true如果参数是深层相等,彼此 false其他。

static boolean equals(Object a, Object b)

返回 true如果参数相等,彼此 false其他。

static int hash(Object... values)

为输入值序列生成哈希码。

static int hashCode(Object o)

返回非的哈希码 null参数,0为 null参数。

static boolean isNull(Object obj)

返回 true如果提供的引用是 null否则返回 false

static boolean nonNull(Object obj)

退货 true如果提供的参考是非 null否则返回 false

static <T> T requireNonNull(T obj)

检查指定的对象引用不是 null

static <T> T requireNonNull(T obj, String message)

检查指定的对象引用不是null并抛出自定义的NullPointerException如果是)。

static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)

检查指定的对象引用不是null并抛出一个自定义的NullPointerException如果是)。

static String toString(Object o)

返回非 null参数调用 toString"null"参数的 "null"null

static String toString(Object o, String nullDefault)

如果第一个参数不是 null ,则返回第一个参数调用 toString的结果, toString返回第二个参数。

java源码

package java.util;

import java.util.function.Supplier;

public final class Objects {
    private Objects() {
        throw new AssertionError("No java.util.Objects instances for you!");
    }
	
    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }	
	
    public static boolean deepEquals(Object a, Object b) {
        if (a == b)
            return true;
        else if (a == null || b == null)
            return false;
        else
            return Arrays.deepEquals0(a, b);
    }	
	
    public static int hashCode(Object o) {
        return o != null ? o.hashCode() : 0;
    }	
	
    public static int hash(Object... values) {
        return Arrays.hashCode(values);
    }	
	
    public static String toString(Object o) {
        return String.valueOf(o);
    }	
	
    public static String toString(Object o, String nullDefault) {
        return (o != null) ? o.toString() : nullDefault;
    }	
	
    public static <T> int compare(T a, T b, Comparator<? super T> c) {
        return (a == b) ? 0 :  c.compare(a, b);
    }	
	
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }

    public static <T> T requireNonNull(T obj, String message) {
        if (obj == null)
            throw new NullPointerException(message);
        return obj;
    }

    public static boolean isNull(Object obj) {
        return obj == null;
    }

    public static boolean nonNull(Object obj) {
        return obj != null;
    }

    public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
        if (obj == null)
            throw new NullPointerException(messageSupplier.get());
        return obj;
    }
}	
package java.util.function;

@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

 

 

 

 

 

 

 

 

 

 

 

 


版权声明:本文为qq_35029061原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。