码迷,mamicode.com
首页 > 其他好文 > 详细

Object和Objects

时间:2018-12-12 20:42:09      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:包括   code   objects   字符串表   int   反射   native   静态   一个   

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

Object和Objects

标签:包括   code   objects   字符串表   int   反射   native   静态   一个   

原文地址:https://www.cnblogs.com/ilovena/p/10110546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!