Object和Objects的区别

Object类

如果一个类没有指定父类,默认就是继承Object类。
Object类里面共有11个方法:
经常用到的equals(),toString()都是直接使用或者重写的Object里面的这些方法;
另外还有final native修饰的方法:反射需要用到的getClass(),线程操作需要的notify(),notifyAll(),wait(long timeout);
还有native修饰的方法:hashCode()和clone()

返回值方法名作用
protected Objectclone()创建并返回此对象的副本
booleanequals(Object obj)判断一些其他对象是否等于此
protected voidfinalize()当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象
Class<?>getClass()返回此Object的运行时类
inthashCode()返回对象的哈希码值
voidnotify()唤醒正在等待对象监视器的单个线程
voidnotifyAll()唤醒正在等待对象监视器的所有线程
StringtoString()返回对象的字符串表示形式
voidwait()导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法
voidwait(long timeout)导致当前线程等待,直到另一个线程调用 notify()方法或该对象的 notifyAll()方法,或者指定的时间已过
voidwait(long timeout, int nanos)导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法,或者某些其他线程中断当前线程,或一定量的实时时间
Object类源码
package java.lang;

public class Object {

    private static native void registerNatives();
    static {
        registerNatives();
    }

    public final native Class<?> getClass();

    public native int hashCode();

    public boolean equals(Object obj) {
        return (this == obj);
    }

    protected native Object clone() throws CloneNotSupportedException;

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

    public final native void notify();

    public final native void notifyAll();

    public final native void wait(long timeout) throws InterruptedException;

    public final void wait(long timeout, int nanos) throws InterruptedException {
        if (timeout < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos > 0) {
            timeout++;
        }

        wait(timeout);
    }

    public final void wait() throws InterruptedException {
        wait(0);
    }

    protected void finalize() throws Throwable { }
}

Objects类

Objects类是final修饰的类,不可继承,内部方法都是static方法,从jdk1.7开始才引入了Objects类

返回值方法名作用
static intcompare(T a, T b, Comparator<? super T> c)如果参数a,b相同则返回0,否则返回c.compare(a, b)的结果
static booleandeepEquals(Object a, Object b)对比a,b参数是否深层次相等,假定a,b为数组,对比数组的每个参数
static booleanequals(Object a, Object b)对比a,b参数是否相等
static inthash(Object… values)为输入值序列生成哈希码
static inthashCode(Object o)返回哈希码。如果o为null则返回0
static booleanisNull(Object obj)如果obj参数为null返回true
static booleannonNull(Object obj)如果obj参数不为null返回true
static TrequireNonNull(T obj)检查指定的对象引用不是 null,为null报空指针错误
static TrequireNonNull(T obj, String message)检查指定的对象引用不是null并抛出自定义的NullPointerException(如果是)
static TrequireNonNull(T obj, Supplier messageSupplier)检查指定的对象引用不是null并抛出一个自定义的NullPointerException(如果是)
static StringtoString(Object o)返回对象的字符串表示形式
static StringtoString(Object o, String nullDefault)如果第一个参数不是 null ,则返回第一个参数调用 toString的结果,否则直接将第二个参数nullDefault返回
Objects类源码
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;
    }
}
  • 15
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值