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

深入学习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 TypeMethod and Description
static <T> intcompare(T a, T b, Comparator<? super T> c)

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

static booleandeepEquals(Object a, Object b)

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

static booleanequals(Object a, Object b)

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

static inthash(Object... values)

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

static inthashCode(Object o)

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

static booleanisNull(Object obj)

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

static booleannonNull(Object obj)

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

static <T> TrequireNonNull(T obj)

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

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

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

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

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

static StringtoString(Object o)

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

static StringtoString(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();
}

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wespten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值