java中的重写toString方法、equals方法、finalize方法、hashCode方法

java源文件中的toString方法其设计的目的是:通过调用这个方法可以将一个java对象转换成 类名@对象的内存地址为十六进制的形式

但是实际的开发中,原toString方法返回的内容其实没有实际的意义。

因此,建议所有的子类都去重写toString方法。其返回的应该是一个简洁的、翔实的、易阅读的。

当使用System.out.println()的时候,当括号中输出的是引用的时候,会自动调用该引用的toString()方法。

String类中的toString方法已经重写了;

 

在java中  == 表示比较两个变量指向的内存地址中的内容是否一样。当是基本数据类型的时候,表示判断基本数据类型的数据是否相同。

      表示引用类型的数据时,是判断其两个内存地址是否相同。

//java中默认的equals方法:
public boolean equals(Object obj){
       return ( this == obj )          
}//由此得出Java中原始的equals方法是不够用的,因此需要重写

 大多是情况下,需要我们重写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对象的内存地址,经过哈希算法,得出一个值。

 

posted @ 2022-06-28 15:08  _八级大狂风  阅读(224)  评论(0编辑  收藏  举报