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修饰,该类的所有方法都是静态方法,调用简单,直接在实际应用中发掘,不在赘述。

posted @ 2018-12-12 19:24  pinezhang  阅读(1060)  评论(0编辑  收藏  举报