1.1Object类
- Object类的特点
所有类都是直接或间接继承Object。 - Object类常用API
boolean equals(Object obj) 比较两个对象是否相同,相同返回true,否则返回false。
String toString() 默认返回值是:类全名@对象地址值
1.1.1 equals方法
- Object类equals方法默认的实现
默认是通过比较两个对象的地址来判断两个对象是否相同。 - 重写equals方法的目的
判断两个对象是否相同时不想通过比较地址值判断,而是希望通过比较两个对象的成员变量的值来判断是否相同。
示例代码
public class Demo01 {
public static void main(String[] args){
// 创建学生对象
Student s1 = new Student("jack",20);
Student s2 = new Student("jack",20);
// 比较两个学生对象是否相同
boolean b = s1.equals(s2);
//没有重写equals情况下,地址是不相等的,所有结果是false
System.out.println(b);
}
}
实体类
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//get set 方法...
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
}
1.1.2 toString方法
- Object类toString方法概述
默认返回值:类全名@对象在内存中的地址值
如: com.jack.demo.Student@75828a0f - Object类toString方法调用时机
直接调用:通过对象名调用
间接调用:直接打印对象到控制台时,系统会自动调用该对象的toString方法。 - 重写toString方法的目的
在打印对象时不想看对象在内存中的地址值,而希望看到对象的成员变量及其值是什么。
示例代码
public class Demo02 {
public static void main(String[] args){
// 创建学生对象
Student s1 = new Student("jack",20);
Student s2 = new Student("rose",20);
System.out.println(s1.getName()+"="+s1.getAge());
System.out.println(s2.getName()+"="+s2.getAge());
s1.showInfo();
s2.showInfo();
// 直接调用toString方法
System.out.println(s1.toString());
// 间接调用:直接打印对象到控制台时,系统会自动调用该对象的toString方法。
System.out.println(s1);
// 创建集合对象
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.add("a");
// 调用ArrayList集合的toString方法
System.out.println(list);
}
}
实体类
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//get set ...
// 显示学生信息(模拟toString方法)
public void showInfo(){
System.out.println(this.name + "=" + this.age);
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
1.2Objects 类
- public static boolean equals(Object a, Object b)
比较对象a和b是否相同,相同返回true,否则false
底层是依赖于对象的equals方法进行比较。 - public static Object requireNonNull(Object obj):
判断obj是否为null,如果不为null,则不抛异常,将对象obj作为返回值返回。
如果obj为null则抛出异常。 - public static boolean nonNull(Object obj)
判断对象obj是否不为null,如果是,则返回true,否则false - public static boolean isNull(Object obj)
判断对象obj是否为null,为null返回true,否则false
示例代码
public class ObjectsDemo {
public static void main(String[] args){
// 创建学生对象
Student s1 = new Student("rose",30);
Student s2 = new Student("jack",20);
// 比较两个学生是否相同
System.out.println(Objects.equals(s1,s2));
// s1 = null;
Student s3 = Objects.requireNonNull(s1);
System.out.println(s3 == s1);
// 判断对象obj是否不为null,如果是,则返回true,否则false
System.out.println(Objects.nonNull(s1));
s1 = null;
// 判断对象obj是否为null,为null返回true,否则false
System.out.println(Objects.isNull(s1));
saveStudent(s1);
}
/*
保存学生信息
*/
public static void saveStudent(Student student){
// 在JDK1.7之后的做法
Objects.requireNonNull(student);
// 在JDK1.7之前的做法
if (student == null){
throw new NullPointerException();
}
System.out.println("保存学生信息");
}
}