目录
一、equals 方法
二、hashCode 方法
三、toString 方法
四、finalize 方法
一、equals 方法
- 只能判断引用类型
- 默认判断的是地址是否相等,也就是判断两个对象是不是同一个对象
- 子类中往往重写该方法,用于判断内容是否相等
public class Equals {public static void main(String[] args) {//基本数据类型,判断值是否相等int num1 = 10;double num2 = 10.0;System.out.println(num1 == num2);//true//equals 方法默认判断的是地址是否相等,也就是判断两个对象是不是同一个对象Integer integer1 = new Integer(1000);Integer integer2 = new Integer(1000);System.out.println(integer1 == integer2);//falseSystem.out.println(integer1.equals(integer2));//true}
}
二、hashCode 方法
- 返回该对象的哈希码值
- 实际上,由 0bject 类定义的 hashCode方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的
- 提高具有哈希结构的容器的效率!
- 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的!两个引用,如果指向的是不同对象,则哈希值是不一样的
- 哈希值主要根据地址号来的!,不能完全将哈希值等价于地址
/*** hashCode 方法*/
public class HashCode {public static void main(String[] args) {A a1 = new A();A a2 = new A();A a3 = a1;System.out.println("a1.hashCode()=" + a1.hashCode());//1625635731System.out.println("a2.hashCode()=" + a2.hashCode());//1580066828System.out.println("a3.hashCode()=" + a3.hashCode());//1625635731}
}class A {
}
三、toString 方法
- 默认返回:全类名+@+哈希值的十六进制
- 子类往往重写 toString 方法,用于返回对象的属性信息
- 重写 toString 方法,打印对象或拼接对象时,都会自动调用该对象的 toString 形式
- 当直接输出一个对象时,toString 方法会被默认的调用
/*** toString方法*/
public class ToString {public static void main(String[] args) {Person person = new Person("懂哥", 20, "IT");System.out.println(person.toString());System.out.println("==当直接输出一个对象时,toString 方法会被默认的调用==");System.out.println(person); //等价 person.toString()}
}class Person {private String name;private int age;private String job;public Person(String name, int age, String job) {this.name = name;this.age = age;this.job = job;}//重写 toString 方法, 输出对象的属性@Overridepublic String toString() {//重写后,一般是把对象的属性值输出,员也可以自己定制return "Person{" +"name='" + name + '\'' +", age=" + age +", job='" + job + '\'' +'}';}}
四、finalize 方法
- 当对象被回收时,系统自动调用该对象的 finalize 方法。子类可以重写该方法,做一些释放资源的操作【演示】
- 什么时候被回收:当某个对象没有任何引用时,则 jvm 就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用 finalize 方法。
- 垃圾回收机制的调用,是由系统来决定(即 GC 算法), 也可以通过 System.gc() 主动触发垃圾回收机制
/*** finalize 方法*/
public class Finalize {public static void main(String[] args) {Car fx = new Car("飞行");// car 对象就是一个垃圾,垃圾回收器就会回收(销毁)对象, 在销毁对象前,会调用该对象的 finalize 方法//程序员就可以在 finalize 中,写自己的业务逻辑代码,就可以实现自己的逻辑//如果程序员不重写 finalize,那么就会调用 Object 类的 finalize, 即默认处理fx = null;System.gc();//主动调用垃圾回收器}
}class Car {private String name;public Car(String name) {this.name = name;}//重写 finalize@Overrideprotected void finalize() throws Throwable {System.out.println("销毁" + name + "牌子汽车");System.out.println("释放某些资源...");}}