初识Object类中的toString()和equals()

一、Object类的概述

JDK类库的根类,所有类的祖先。

任何一个类默认继承Object,没有直接继承,也会间接继承。

Object类是类层次结构的根。每个类都有 Object作为超类。所有对象,包括数组,实现这个类的方法。

包名+类名:java.lang.Object

二、Object类当中有哪些常用的方法?

①怎么找这些方法?

去源代码当中。(但这种方式比较麻烦,源代码也比较难)

去查阅java类库的帮助文档

②什么是API?

应用程序编程接口。(Application program Interface)

整个JDK的类库就是一个Javase的API。

每一个API都会配置一套API帮助文档。

③ 目前需要知道的方法:

protected Object clone() //负责克隆的
boolean equals(Object obj) //判断两个对象是否相等
protected void finalize() //垃圾回收器负责调用的方法
int hashCode()  //获取对象哈希值的一个方法
String toString() //将对象转换成字符串的形式

三、Object类中的toString()方法

①toString()的源代码长什么样?

public String toString() { 
    return getClass().getName() + '@' + Integer.toHexString(hashCode());
} 
//源代码上toString()方法的默认实现是: 类名@对象的内存地址转换为十六进制的形式

②SUN公司设计toString()方法的目的是什么?

返回对象的字符串表示形式。

总的来说,这 toString方法返回一个字符串,“以文本方式表示”这个对象。

其结果应该是一个简洁,但详实的代表性,易阅读的。根据实际需要,建议所有子类都重写此方法

Object类的toString方法返回一个包含该类的对象是一个实例的名称字符串的符号` @ ',和符号进制表示的对象的哈希码。

换句话说,此方法返回一个等于值的字符串

 

@Override
public String toString() {
    return this.year + "年" + this.month + "月" + this.day + "日";
}
class MyTime{
    int year;
    int month;
    int day;

    public MyTime(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public MyTime() {
    }



    @Override
    public String toString() {
        return "MyTime{" +
                "year=" + year +
                ", month=" + month +
                ", day=" + day +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MyTime myTime = (MyTime) o;
        return year == myTime.year &&
                month == myTime.month &&
                day == myTime.day;
    }
}
public class Test01 {
    public static void main(String[] args) {
        MyTime T1 = new MyTime(1970,1,1);
        String s1 = T1.toString();
        //MyTime类重写toString()方法之前
        System.out.println(s1);
        //cn.edu.mju.t02.MyTime@1540e19d
        //MyTime类重写toString()方法之后
        System.out.println(s1);
        //1970年1月1日

        //输出引用时,会自动调用toString()方法
        System.out.println(T1);
    }

}

 @打印输出对象/引用时,会自动调用toString()方法

四、Object类中的equals()方法

①equals()的源代码长什么样?

public boolean equals(Object obj) {
    return (this == obj);
}
//以上这个方法是Object类的默认实现。

②SUN公司设计equals()方法的目的是什么?

以后编程的过程当中,都要通过equals()方法来判断两个对象是否相等

③我们需要研究一下Object类给的这个默认的equals()方法够不够用!!!

在Object类的equals()方法里默认采用"=="来判断两个对象是否相等,而"=="判断的是两个java对象的内存地址是否相等,我们应该判断两个java对象的内容是否相等。所以Object中默认的Object方法不够用,需要子类重写

@Override
public boolean equals(Object obj) {
        if (obj == null || !(obj instanceof MyTime)){
            return false;
        }
        if (this == obj){
            return true;
        }
        MyTime t =(MyTime)obj;
        return this.year == t.year && this.month == t.month && this.day == t.day;
}
public class test02 {
    public static void main(String[] args) {
        //判断两个基本数据类型的数据是否相等直接使用"=="就行
        //判断a里面的100和b里面的100是否相等
        int a = 100;
        int b = 100;
        System.out.println(a==b);//true
        //判断两个java对象是否相等,用equals,而不能用"=="
        MyTime T1 = new MyTime(2008,8,8);
        MyTime T2 = new MyTime(2008,8,8);
        //这里"=="判断的是:T1中保存的对象的内存地址和T2中保存的对象的内存地址是否相等。
        System.out.println(T1==T2);//false
        //这里equals()方法判断的是T1对象保存的数据和T2对象保存的数据是否相等
        //发现Object类的equals()方法里面用的是"==",而"=="判断不了一个对象是否相等
        //不够用,就要重写equals()方法
        System.out.println(T1.equals(T2));//true
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值