Java基础:Object类介绍、toString()方法、equals()方法

Object类介绍

java.lang.Object中描述的所有方法子类都可以使用,每个类都使用Object类作为超类,所有对象(包括数组)都实现这个类的方法。
如果一个类没有指定父类,默认就是继承Object类,即下面两句是一样的:

class Person { }
class Person extends Object { }

下面是Object类的结构(点击左侧structure打开):
在这里插入图片描述

toString()方法

作用:打印对象信息
重写前:打印的是包名.类名@地址值
重写后:打印的是对象中的属性值(成员变量的值)

    // Object中的源码
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

因为在java中Object类是基类,所以每个类都会有toString方法。
System.out.println(Object)实际上就是调用 object的toString方法。
我们用的比较多的就是String类的toString 方法,String类重写了Object的toString方法,用于直接返回String的字符串值。

equals()方法

作用:比较两个对象
重写前:比较对象的地址
重写后:比较对象中的属性值(成员变量的值)

    // Object中的源码:
    public boolean equals(Object obj) {
        return (this == obj);
    }

可以看到是使用= =来进行比较的,= =其实是比较两个对象的的内存地址。所以如果 object1.equals(object2)结果为true,则表示equals1和equals2实际上是引用同一个对象,地址一样。
双等号= =如果作用于基本数据类型,则比较的是值是否相等;如果作用于引用类型,则比较的是变量所指向的对象的地址。
对于非String、Date类型,equals比较的是引用类型的变量所指向的对象的地址。但对于String、Date类型,在其类中重写了equals(),所以String的equals()方法是进行内容比较,而不是单纯的引用比较。

Q:为什么要在我们自己的类中重写equals()?

A:我们常常需要自己创建类,比如我们实现一个Person类,它是继承自Object类的,所以它的equals()方法默认使用的是上面源码里的equals()方法,当我们使用equals()进行比较的时候,比较内存地址。那么有可能出现两个Person对象的参数都相同(比如姓名、年龄、身份证号等,在我们的实际认知中认为这两个人就是一个人,应该返回true),但是由于他们的内存地址是不一样的,所以equals()方法会返回false。那么我们就应该重写equals()方法去比较内容,另外要注意重写的规范。

另外,对比时注意空指针异常的问题,也推荐使用 java.util.Objects中的equals方法,Objects(是Objects,不是Object)是一个JDK7 引入的工具类,比较格式boolean b=Objects.equals(a1,a2),下面的源码中可以看出它是如何避免空指针异常的。

public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值