Object类是java中lang包里面的类,是所有类的父类,任何类都可看做是对Object类的继承。
Object类中主要常用方法
方法声明 | 功能介绍 |
Object( ) | 使用无参方式构造对象 |
boolean equals(Object obj) | 用于判断调用对象是否与参数对象相等 该方法默认比较两个对象的地质是否相等,与==运算符的结果一致 若希望比较两个对象的内容,则需要重写该方法 若该方法被重写后,则应重写hashCode方法来保证结果的一致性 |
int hashCode() | 用于获取取调用对象的哈希码值(可以理解为内存地址的编号) 若两个对象调用equals方法相等,则各自调用该方法的结果必须相同 若两个调用对象equals方法不相等,则各自调用该方法的结果应该不同 为了使该方法与equals方法保持一致,需要重写该方法 |
String tostring() | 用于获取调用对象的字符串形式 该方法默认返回的字符串为:包名.类名@哈希码值的十六进制 为了返回更有意义的数据,需要重写该方法 使用print或println打印引用变量或字符串拼接引用变量都会自动调用该方法 |
Class<?>getClass() | 用于返回调用对象执行时的Class实例,反射机制使用 |
代码实现 以student类为例
import java.util.Objects;
public class Student {
private int id;
private String name;
public Student(int id, String name) {
setId(id);
setName(name);
}
public int getId() {
return id;
}
public void setId(int id) {
if (id > 0) {
this.id = id;
} else
System.out.println("序号不合理!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student() {
}
/*@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return id == student.id &&
Objects.equals(name, student.name);
}*/
// 这是idea 自带的关于equals方法和hashCode方法的重写,可用快捷键 Ctrl+insert
@Override
public int hashCode() {
return getId()*31+12;
}
@Override
public boolean equals(Object obj){
//1.处理地址相同的情况,也就是自己和自己比的情况
if(this==obj) return true;
//2.处理参数对象为空的特殊情况
if(null==obj) return false;
//3.比较两个对象的学号,也就是this和obj
if(obj instanceof Student){
Student student= (Student)obj;
return this.getId()==student.getId();
//注意是 return 此方法不是void修饰的,一定要有return
}
//4.若类型不相同,则直接没有可比性
return false;
}
@Override
public String toString() {
return "我的学号是{" +
"id=" + id +
", 我的名字是='" + name + '\'' +
'}';
}
}
student类的测试类
public class StudentTest {
public static void main(String[] args) {
//1.声明两个student类型的引用值向对象并判断其是否相等
Student student1 = new Student(1234,"张飞");
Student student2 = new Student(1234,"李四");
// 能调用equals方法的原因:student类的父类是object,而equals是object里面的成员方法
boolean result = student1.equals(student2); //alt +insert 接返回值
//想要equals比较内容 ==> 重写该方法
System.out.println("result:"+result); // 在没重写equals方法时,默认比较地址
System.out.println(student1==student2);
System.out.println("-----------------------------------------------");
//2.关于hashCode的方法
int ia=student1.hashCode();
int ib=student2.hashCode();
System.out.println("ia="+ia); //用id来作为equals 的比较内容
System.out.println("ib="+ib); //id相同,所以ia和ib调用hashCode后返回相同的值
//3. toString方法
student1.toString(); //只是返回了相应的内容,并没有用println打印
String string = student2.toString(); //要运行触结果,需要system.out
System.out.println("----------------------");
System.out.println(student1.toString());
System.out.println(string);
}
}
运行结果