Object类的两种常用方法
一. Object类二. 方法源码三. 案例1.学生类2. toString方法2.1 测试2.2 重写后的toString方法2.3 println()源码的底层逻辑
3. equals方法3.1测试3.2 重写后的equals方法源码(内部逻辑需要了解)
四. 快捷键
一. Object类
Object类存在于java.lang包中,它是所有类的父类,所有类对Object类的继承是java默认的。下面给出Object类中最常用的两个方法。
二. 方法源码
Object类的equals方法源码
public boolean equals(Object obj
) {
return (this == obj
);
}
Object类的toString方法源码
public String
toString() {
return getClass().getName() + "@" + Integer
.toHexString(hashCode());
}
三. 案例
一般比较对象是否相等需要重写equals方法,输出内容需要重写toString方法
1.学生类
public class Student {
private String id
;
private String name
;
public Student() {}
public Student(String id
, String name
) {
this.id
= id
;
this.name
= name
;
}
}
2. toString方法
2.1 测试
重写前
public class ToStringTest {
public static void main(String
[] args
) {
Student s
=new Student("1","zhang");
System
.out
.println(s
);
}
}
重写后
System
.out
.println(s
);
通过查看println()函数源码后发现此函数底层是通过调用toString方法,所以没重写println方法时还是调用的Object类的toString方法,重写了toString方法后,覆盖了Object类toString方法。
2.2 重写后的toString方法
@Override
public String
toString() {
return "Student{" +
"id='" + id
+ '\'' +
", name='" + name
+ '\'' +
'}';
}
2.3 println()源码的底层逻辑
println源码
3. equals方法
3.1测试
重写前 实例化两个学号与姓名都相同的学生对象后,调用equals方法判断是否相等,输出结果是是false,这样就可以发现如果不重写equals方法,无法比较对象是否相等。
public class EqualsTest {
public static void main(String
[] args
) {
Student s1
=new Student("1","zhang");
Student s2
=new Student("1","zhang");
System
.out
.println(s1
.equals(s2
));
}
}
重写后 在学生类中重写equals方法后,调用equals方法判断是否相等,输出结果是是true。
System
.out
.println(s1
.equals(s2
));
3.2 重写后的equals方法源码(内部逻辑需要了解)
@Override
public boolean equals(Object o
) {
if (this == o
) return true;
if (o
== null
|| getClass() != o
.getClass()) return false;
Student student
= (Student
) o
;
if (id
!= null
? !id
.equals(student
.id
) : student
.id
!= null
) return false;
return name
!= null
? name
.equals(student
.name
) : student
.name
== null
;
}
四. 快捷键
查看方法的源码:ctrl+b快速重写方法:alt+insert查看源码成员结构:alt+7