什么是Object类
Object类是所有类的始祖,在Java中每个类都是由它扩展而来的。
equals()方法
在 Object 类当中,equals()的底层是“==”,String 类将其重写。
==和equals() 有什么区别
对于基本数据类型而言,==比较值是否相同;对于引用数据类型而言,==比较变量所指向的地址是否相同。
Object 类当中的 equals() 方法,无法比较基本数据类型,比较的是引用数据类型所指向的地址是否相同。
public class Test {
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1 == o2);
System.out.println(o1.equals(o2));
}
}
子类能够使用父类的方法和变量。
public class Test {
public static void main(String[] args) {
Target target1 = new Target();
Target target2 = new Target();
System.out.println(target1.equals(target2));
}
}
public class Test {
private int age;
public Test(int age) {
this.age = age;
}
}
ppublic class People {
public static void main(String[] args) {
Test test1 = new Test(1);
Test test2 = new Test(1);
System.out.println(test1.equals(test2));
System.out.println(test1 == test2);
}
}
但是对于字符串来说,String 类型的变量存储在字符串常量池当中,“123”在堆内存中开辟两块不同的内存空间,两块内存空间同时指向字符串常量池。“==”比较的是堆内存开辟的内存空间是否相同(地址);当子类拥有与父类相同的方法,这叫做重写。此时子类调用的是自己的(重写后的)方法。String 类中的 equals() 方法先比较地址是否相等,如果不相等则比较值是否相等。
public class People {
public static void main(String[] args) {
String a = new String("123");
String b = new String("123");
System.out.println(a == b);
System.out.println(a.equals(b));
}
}