/*
Object类中成员方法:
public boolean equals(Object obj)
protected void finalize() 是做垃圾回收的,不是立刻就做回收
面试题:final finally finalize 区别?
protected Object clone()
知识点:
1、==比较,如果比较的基本数据类型,直接比较具体的数值是否相等,若比较的是引用数据类型,比较的是地址值是否一样
Object中的equals源码 public boolean equals(Object obj) {
return (this == obj);
}
2、Object类中的equals方法默认直接使用==比较两个对象,若地址值不一样,就是false
*/
class Demo2 extends Object {
int a;
@Override
public String toString() {
return "Demo2{" +
"a=" + a +
'}';
}
@Override
public boolean equals(Object o) { // d1.equals(d2)
/*
o -- d2
this -- d1
*/
if (this == o) return true;//如果d1和d2的地址值相等,返回true,==比较的是地址值,d1和d2是引用数据类型
if (o == null || getClass() != o.getClass()) return false;//getClass() != o.getClass()表示不是同一个类
Demo2 demo2 = (Demo2) o;//将d2转为Demo类型
return this.a == demo2.a;//==比较基本数据类型的数值,this.a,demo2.a是基本数据类型
}
}
public class ObjectDemo2 {
public static void main(String[] args) {
//创建第一个Demo2对象
Demo2 d1 = new Demo2();
d1.a = 100;
System.out.println(d1);
//创建第二个Demo2对象
Demo2 d2 = new Demo2();
d2.a = 100;
System.out.println(d2);
// Object中的equals方法默认比较的是地址值
System.out.println(d1.equals(d2)); // false ; 类重写equals方法后,比较的就是成员变量值:true
String s1 = new String("hello"); // 堆内存中
String s2 = "hello"; // 方法区中的常量池中
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true 说明String类中重写equals方法,比较的是内容
System.out.println(s1); // hello 说明String类中重写toString方法,获取对象中的内容
}
}