Object-equals-to String
1、JDK的根类库:Objec:常用方法
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 } }
4、finalize()方法。
- 方法是protected修饰的
- finalize()方法只有一个方法体,里面没有代码
- GC:负责调用finalize()方法。
//Object类中这个方法的源代码 protected void finalize() throws Throwable { }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix