该笔记于学习黑马程序员java课程时记录。
一、概述
java.lang.Object
类是Java语言中的根类,即是所有类的父类。所有类对Object类都有继承关系,Object类中的所有方法子类也都可以使用,在对象实例化的时候,最终找的父类也是Object。
二、主要方法
Object类在API文档中共有11个方法,我们日常主要用到toString()
和equals()
方法
1、toString方法
①方法声明:
public String toSring(); // 返回该对象的字符串表示形式
默认的对象的字符串表示也就是对象的类型+@+内存地址值,而我们在实现其他类的过程往往需要根据对象的属性改变字符串的表达形式,因此就需要覆盖重写它。
②覆盖重写:
例如重写一个Student类中的toString()
方法。
public class Student{
private String name;
private int id;
private int age;
@Override
public String toString(){
return "name=" + name + ", age=" + age + ", id=" + id;
}
/* Geter/Seter
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
*/
}
2、equals方法
①方法声明:
调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。
public boolean equals(Object obj); // 比较两个对象是否相同
如果没有覆盖重写equals方法,则执行Object类中默认的==运算符对两对象的地址进行比较,如果地址相同返回true,不同返回false。
②覆盖重写:
如果希望对具体对象的内容进行比较来判断两个对象是否相同则需要覆盖重写equals方法。例如对于Student类:
public class Student{
public String name;
public int id;
public int age;
@Override
public boolean equals(Object s){
if(this == s) return true; // 如果对象地址相同,则认为两对象相同
Student stu = (Student) s; // 把当前类型转换成Student类型
return this.age == stu.age &&
this.name.equals(stu.name) &&
this.id == stu.id;
}
}
三、Objects类
import java.util.Objects
在JDK7中添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:
public static boolean equals(Object a, Object b) // 判断两个对象是否相等。
源码实现:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
另外还有
public static boolean nonNull(Object o);// 用于判断对象是否为null,不是返回true,否则返回false
// 与之对应
public static boolean isNull(Object o); // 与其相反
public static <T> T requireNonNull(T o); //检查对象o不为null,如果为null,则抛出空指针异常,否则返回o本身
具体查阅API文档