Object和Objects

Object

在Java,Object类是超级父类,是所有类的父类。

    public boolean equals(Object obj) {
        return (this == obj);
    }
    public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());//返回该对象实现类的“类名+@+hashcode”值
    }
    public final native Class<?> getClass();//返回运行时该Class对象类型,常用于反射

我们可以看到,equals方法判断的是2个对象是否是同一个对象。
这里说下,在java中 “==” 是判断两个对象是否同一,而不是判断相等。因此Object类中的equals方法也是判断两个对象是否同一。要判断两个对象是否相等,就需要重写equals()方法。
比如

    Person a = new Person("1");
    Person b = new Person("1");
    System.out.println(a.equals(b));
    System.out.println(a.toString());
    System.out.println(b.toString());
    //输出
    false
    com.google.common.base.Person@63961c42
    com.google.common.base.Person@65b54208

这段代码打印为false,为啥呢,根据Object的源码知道equls比较的是2个对象是否为同一个。但是很明显,a和b的内存地址不一致,因此二者不是同一个,所有打印false。
但是在平时我们经常用equls方法判断2个字符串是否相等

        String a = new String("hello");
        String b = new String("hello");
        System.out.println(a.equals(b));
        System.out.println(a.toString());        
        System.out.println(b.toString());
    //输出
        true
        hello
        hello
    

实际上,a和b仍然处于不同的内存地址。但是String类复写了Object的方法,因此造成该输出结果。具体可查看String源码。

Objects

Guava的Objects类功能比较单一,这里介绍jdk的java.util.Objects。
Objects。类由一些操作对象的静态工具方法构成,这些工具方法包括了非空检查、方法的非空参数检查、比较对象的hashCode、为对象返回一个字符串表示、比较两个对象.
该类由final修饰,该类的所有方法都是静态方法,调用简单,直接在实际应用中发掘,不在赘述。

猜你喜欢

转载自www.cnblogs.com/ilovena/p/10110546.html