Object-equals-to String

1、JDK的根类库:Objec:常用方法

  • 这个老祖宗类中的方法都是所有子类通用的。 任何一个类默认继承Object。就算没有直接继承,也会间接继承。
  • boolean equals(Object obj)    判断两个对象是否相等
  • String toString()      将对象转换成字符串形式
  • protected void finalize()   垃圾回收器负责调用的方法

2、toString()方法 

  • 所有类的toString()方法是需要重写的。重写规则,越简单越明了就好。
  • System.out.println(引用); 这里会自动调用“引用”的toString()方法。
  • String类是SUN写的,toString方法已经重写了。
  • SUN公司设计toString()方法的目的:调用这个方法将一个“java对象”转换成“字符串表示形式”
//源代码上toString()方法的默认实现是:类名@对象的内存地址转换为十六进制的形式
public String toString() {
    return this.getClass().getName() + "@" + Integer.toHexString(hashCode());
}
复制代码
public class MyTime{
    int year;
    int month;
    int day;

public MyTime(){}

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

    public String toString(){
        //return this.year + "年" + this.month + "月" + this.day + "日";
    }
}

public class Test01{
    public static void main(String[] args){
        MyTime t1 = new MyTime(1970, 1, 1);        
        // 注意:输出引用的时候,会自动调用该引用的toString()方法。
        System.out.println(t1);
    }
}
复制代码

3、equals()方法

  • 所有类的equals方法也需要重写
  • Object中的equals方法比较 的是两个对象的内存地址使用的是双等号“==”,我们应该比较内容,所以需要重写。
  • 重写规则:主要看是什么条件和什么条件相等时,表示两个对象相等。
  • 基本数据类型比较使用:==
  • 对象和对象比较(引用数据类型):调用equals方法
  • String类是SUN编写的,所以String类的equals方法重写了。 判断两个字符串是否相等,最好不要使用==,要调用字符串对象的equals方法。
//equals方法的源代码,Object类的默认实现。
public boolean equals(Object obj) {return (this == obj);    }
复制代码
public class MyTime { //extends Object{
    int year;
    int month;
    int day;

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

    // 重写Object类的equals方法
    // 重写:相同的返回值类型、相同的方法名、相同的形式参数列表
    public boolean equals(Object obj) {
        // 如果obj是空,直接返回false;
        //如果obj不是一个MyTime,没必要比较了 ,直接返回false
        if(obj == null || !(obj instanceof MyTime)){
            return false;
        }
        // 如果this和obj保存的内存地址相同,没必要比较了,直接返回true。
        // 内存地址相同的时候指向的堆内存的对象肯定是同一个。
        if(this == obj){
            return true;
        }
        // 程序能够执行到此处:说明obj不是null,obj是MyTime类型。
        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){

        // 创建一个日期对象是:2008年8月8日。MyTime t1 = 0x1234;
        MyTime t1 = new MyTime(2008, 8, 8); 
        // 创建了一个新的日期对象,日期也是:2008年8月8日。MyTime t2 = 0x3698;
        MyTime t2 = new MyTime(2008, 8, 8); 
        
        // 这里的“==”判断的是:t1中保存的对象内存地址和t2中保存的对象内存地址是否相等。
        System.out.println(t1 == t2); // false
        
        // 重写Object equals方法之前(比较的是对象内存地址)
        // 重写Object equals方法之后(比较的是内容。)
        System.out.println(t1.equals(t2)); //true

    }
}
复制代码
复制代码

综上所述:

  • String类已经重写了equals方法,比较两个字符串不能使用==,必须使用equals。
  • java中基本数据类型比较是否相等,使用==
  • java中所有的引用数据类型统一使用equals方法来判断是否相等。

 4、finalize()方法。

  • 方法是protected修饰的
  • finalize()方法只有一个方法体,里面没有代码
  • GC:负责调用finalize()方法。
 //Object类中这个方法的源代码  
protected void finalize() throws Throwable { }

 

 

posted @   280887072  阅读(22)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示