Object类的概述(重点)
java.lang.Object类是Java语言中类层次结构的根类,也就是说任何一个类都是该类的直接或者间接子类。
如果定义一个Java类时没有使用extends关键字声明其父类,则其父类为 java.lang.Object 类。
Object类定义了“对象”的基本行为, 被子类默认继承。
常用的方法方法声明 功能介绍
Object()
使用无参方式构造对象
boolean equals(Object obj)
用于判断调用对象是否与参数对象相等。该方法默认比较两个对象的地址是否相等,与 == 运算符的结果一致若希望比较两个对象的内容,则需要重写该方法。若该方法被重写后,则应该重写hashCode方法来保证结果的一致性。
int hashCode()
用于获取调用对象的哈希码值(内存地址的编号)。若两个对象调用equals方法相等,则各自调用该方法的结果必须相
同若两个调用对象equals方法不相等,则各自调用该方法的结果应该不相同。为了使得该方法与equals方法保持一致,需要重写该方法。
String toString()
用于获取调用对象的字符串形式该方法默认返回的字符串为:包名.类名@哈希码值的十六进制
为了返回更有意义的数据,需要重写该方法 :使用print或println打印引用或字符串拼接引用都会自动调用该方法
Class<?> getClass()
用于返回调用对象执行时的Class实例,反射机制使用
默认的equals方法比较的是两个对象的地址,重写equals时候也要重写HashCode方法,Java官方规定,equals相等,Hashcode相同,equals不同则hashCode也不同
equals方法和hashCode 方法可以自动生成,alt + insert
新建一个Student类,重写其equals和hashCode方法
public class Student {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
包装类
通常情况下基本数据类型的变量不是对象,为了满足万物皆对象的理念就需要对基本数据类型的变量进行打包封装处理变成对象,而负责将这些变量声明为成员变量进行对象化处理的相关类,叫做包装类。