Object类
- 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。
- 当然了 Object作为所有类的父类,提供了很多常用的方法给每个子类对象拿来使用。
Object类的常用方法
方法名称 | 方法的说明 |
public String toString() | 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址 |
public boolean equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false |
toString方法
- 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
- 让子类重写,以便返回子类对象的内容。
如:下列创建一个学生类 使用toString方法返回该对象的地址。
public class test {
public static void main(String[] args) {
Student s = new Student("小明",20);
System.out.println(s.toString());
}
}
执行结果:
toString方法的主要意义
父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息。
在Studeng类中将toString类重写:
@Override
public String toString() {
return "Student类中(学生姓名="+name+"学生年龄="+age+")";
}
然后在test类中执行:
public class test {
public static void main(String[] args) {
Student s = new Student("小明",20);
System.out.println(s.toString());
}
}
执行结果:
equals方法
- 作用:默认是与另一个对象比较地址是否一样
- 意义:让子类重写,以便比较对象的内容是否相同。
在默认情况下 == 与 equals方法作用相同 都是比较地址是否一样
所以 equals的主要意义
为了被子类重写,以便子类自己来定制比较规则(比如比较对象内容)。
在Student类中将equals重写:
重写方法 自己定制相等规则 比较者 r1 = this 被比较者 r2 = o
@Override
public boolean equals(Object o) {
if (o instanceof Student) {
//判断两个对象是否相同
Student r2 = (Student) o; //强转o
return this.name.equals(r2.name) && this .age == r2.age;
}else {
return false; //学生类对象只能和学生类对象比较
}
}
然后在test类中执行:
public class test {
public static void main(String[] args) {
Student r1 = new Student("小明",20);
Student r2 = new Student("小明",20);
System.out.println(r1.equals(r2));
}
}
执行结果:相同
Objects类
Objects是一个工具类,提供了一些方法去完成一些功能
方法名 | 说明 |
public static boolean equals(Object a, Object b) | 比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较 |
public static boolean isNull(Object obj) | 判断变量是否为null ,为null返回true ,反之 |
Objects类 中也有equals方法
Objects.equals(name, student.name);
如下是java 官方写的 Objects类 中也有equals方法的源码
使用Objects的equals方法在进行对象的比较会更安全(严谨的添加了非空校验)。