java中的重写toString方法、equals方法、finalize方法、hashCode方法
java源文件中的toString方法其设计的目的是:通过调用这个方法可以将一个java对象转换成 类名@对象的内存地址为十六进制的形式
但是实际的开发中,原toString方法返回的内容其实没有实际的意义。
因此,建议所有的子类都去重写toString方法。其返回的应该是一个简洁的、翔实的、易阅读的。
当使用System.out.println()的时候,当括号中输出的是引用的时候,会自动调用该引用的toString()方法。
String类中的toString方法已经重写了;
在java中 == 表示比较两个变量指向的内存地址中的内容是否一样。当是基本数据类型的时候,表示判断基本数据类型的数据是否相同。
表示引用类型的数据时,是判断其两个内存地址是否相同。
1 2 3 4 | //java中默认的equals方法: public boolean equals(Object obj){ return ( this == obj ) } //由此得出Java中原始的equals方法是不够用的,因此需要重写<br> |
大多是情况下,需要我们重写equals方法,但是在String类中中,已经重写了equals方法了,比较两个字符串不能使用==,必须使用equals方法。
*****************************************************************************************************************************************************************************
关键总结:在java中,判断基本数据类型相等用==来判断
在java中,所有的引用数据类型统一使用equals方法来判断是否相等。
*****************************************************************************************************************************************************************************
//重写equals方法 public class EqualTest{ public static void main(String[] args){ Student s1 = new Student(123, "张三"); Student s2 = new Student(123, "张三"); System.out.println(s1.equals(s2)); //Student s1 = new Student(123, new String"张三")); //Student s2 = new Student(123, new String"张三")); } } class Student{ int no; String school; public Student(){ } public Student(int no, String school){ this.no = no; this.school = school; } public boolean equals(Object obj){ if(obj == null || !(obj instanceof Student)) return false; if(this == obj) return true; Student s = (Student)obj; //此处为向下转型 //什么时候用到向下转型,当父类型的变量想调用子类型的方法的时候,不能直接调用,但是可以通过向下转型实现, //要养成习惯的是,向下转型的时候先要通过instance来判断一下 例如 animal instanceof cat //当其结果为true时再继续下面的代码。equals方法比较通用 return s.school == this.school && s.no == this.no; } }
关于object类中finalize()方法。
1,在Object类中的源代码:
protected void finalize() throws Throwable{}
GC负责调用finalize()方法。*****System.gc();建议启动垃圾回收器
2,finalize()方法只有一个方法体,里面没有代码。而且这个方法是protected修饰的。
3,此方法不需要人为的手动调用,JVM的垃圾回收器负责调用这个方法。只需要重写,会有程序自动来调用。
4,finalize()方法的执行时机;当一个java对象即将被回收器回收的时候,垃圾回收器负责调用finalize()方法。当在垃圾回收时,想要执行一段代码时,可以放在finalize()中。类似静态代码块。比如记录释放时间点
hashCode()方法返回是哈希码。
实际上就是一个java对象的内存地址,经过哈希算法,得出一个值。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~