一.Object类是什么?
Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object, 子类可以使用 Object 的所有方法 。 Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。
所有对象(包括数组)都能使用Object类的方法。
二.一些常用的Object类方法
1.equals(Object obj)
● ==与equals(Object obj)的区别
⑴==是一个比较运算符
①==:既可以判断基本类型,又可以判断引用类型
②==:如果判断基本类型,判断的是值是否相等。例:int i=10;double d=10.0; i==d为true
③==:如果判断引用类型,判断的是地址是否相等,即判断是不是同一个对象
例:
跟类型无关,子类的对象地址赋值给父类,也是指向同一对象,故仍为true
⑵ equals方法
equals只能判断引用类型,也就是一个类
不同类型的对象调用的equals方法都是自己的类中重写的equals方法,比较两个对象的内容是否一样
如:
Object的equals源码是:(判断地址是否一致,即是否为同一对象)
String的equals源码是:(重写后判断两个对象的内容是否一致)
Integer的equals源码是:(重写后判断两个对象的值是否一致)
● 练习
(1)
(2)重写Person类equals
public class Person {
private String name;
private int age;
private char gender;
}
首先在没有重写前,我们调用的equals方法是从Object类中继承的equals,也就是单纯比较是不是一个对象。
如:
public class EqualsExercise01 {
public static void main(String[] args) {
Person person1=new Person("jack",12,'男');
Person person2=new Person("jack",12,'男');
System.out.println(person1.equals(person2)); //false
}
}
现在来重写,要求比较两个对象的内容是否一致
public boolean equals(Object obj){
//判断如果比较的两个对象是同一个对象,则直接返回true
if(this==obj){
return true;
}
//类型判断,是Person 我们才比较
if(obj instanceof Person){
//进行向下转型,因为我需要得到obj的 各个属性
Person p=(Person)obj;
return p.getAge()==this.age&&p.getName().equals(this.name)&&p.getGender()==this.gender;
}
//如果不是person,则直接返回false
return false;
}
注:instanceof是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
现在调用equals后
System.out.println(person1.equals(person2));//true
(3)(注意String类的equals系统已经重写,比较的是二者的内容)
2.hashCode
3.toString
①toString()源码
例子:
public class EqualsExercise01 {
public static void main(String[] args) {
Person person1=new Person("jack",12,'男');
System.out.println(person1.toString());
}
}
输出:com.windows.object.Person@282ba1e
②我们用toString经常是重写,输出对象的属性
因为这个经常用,已经做成了模板,使用快捷键akt+insert -> toStirng 即可(当然也可以自己写)
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
现在使用后输出 Person{name='jack', age=12, gender=男}
③当直接输出一个对象时,toString方法会被默认调用
如:
public class EqualsExercise01 {
public static void main(String[] args) {
Person person1=new Person("jack",12,'男');
System.out.println(person1);
}
}
输出:Person{name='jack', age=12, gender=男}
4.finalize(好像被弃用了,不用看了)