一、Object类
- object类介绍
- object类是所有类的父类,一个类会直接或间接的继承自该类,该类中提供了一些非常常用的方法
- toString()方法
- 作用:打印对象的信息
- 重写前:打印的是包类名@地址值
- 重写后:打印的是对象中的属性值
- equals()方法
- 作用:比较两个对象的
- 重写前:比较的是对象的地址值
- 重写后:比较的是对象中的属性值
public class Student{
private String name;
private int age;
public Student(){
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@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);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public class Test1 {
public static void main(String[] args) {
String str="abc";
System.out.println(str);
Student student=new Student("李白",33);
System.out.println(student);
}
}
public class Test2 {
public static void main(String[] args) {
String str1="abc";
String str2="abc";
System.out.println(str1.equals(str2));
Student student1=new Student("李白",34);
Student student2=new Student("李白",34);
System.out.println(student1.equals(student2));
}
}
二、Objects类
- equals()方法
- 比较两个对象是否相同,但是加了一些健壮性的判断,容忍空指针
/* public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }*/
public class Test3 {
public static void main(String[] args) {
String str1=null;
String str2="abc";
boolean result=Objects.equals(str1,str2);
System.out.println(result);
}
}
重写Object
/*
* Person类默认继承自Object类,所以可以使用Object类中的toString方法
* String toString()返回该对象的字符串表示
* */
Person p=new Person();
String s=p.toString();
System.out.println(s);
// 直接打印对象的名字,其实就是调用对象的toString方法 p=p.toString()
System.out.println(p);
/*直接打印对象的的地址值没有意义,需要重写Object类的toString方法
* 打印对象的属性(name,age)*/
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
toString方法
/*看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可
* 如果没有重写toString方法,那么打印的就是对象的地址值
* 如果重写toString方法,那么就按照重写的方式打印*/
Random r=new Random();
System.out.println(r);
System.out.println("~~~~~~~~~~~~~~~~~~~~");
Scanner sc=new Scanner(System.in);
System.out.println(sc);
System.out.println("~~~~~~~~~~~~~~~~~~~~");
ArrayList list=new ArrayList();
list.add(1);
list.add(2);
System.out.println(list);
Equals方法
/*
* Person类继承了Object类,所以可以使用Object类的equals方法
* boolean equals(Object obj) 指示其他某个对象是否与此对象”相等“
* Object类equals方法的源码:
* public boolean equals(Object obj){
* return this==obj;
* }
* 参数:Object obj:可以传递任意的对象
* 方法体:
* ==:比较运算符,返回的是一个布尔值 true、false
* 基本数据类型:比较的是值
* 引用数据类型:比较的是两个对象的地址值
* this是谁?哪个对象调用的方法,方法中的this就是那个对象
* obj是什么?传递过来的参数
* this==obj-->person1==person2*/
public class Demo02Equals {
public static void main(String[] args) {
/*
* Person类继承了Object类,所以可以使用Object类的equals方法
* boolean equals(Object obj) 指示其他某个对象是否与此对象”相等“
* Object类equals方法的源码:
* public boolean equals(Object obj){
* return this==obj;
* }
* 参数:Object obj:可以传递任意的对象
* 方法体:
* ==:比较运算符,返回的是一个布尔值 true、false
* 基本数据类型:比较的是值
* 引用数据类型:比较的是两个对象的地址值
* this是谁?哪个对象调用的方法,方法中的this就是那个对象
* obj是什么?传递过来的参数
* this==obj-->person1==person2*/
Person person1=new Person("张三",22);
Person person2=new Person("张三",22);
boolean b=person1.equals(person2);
System.out.println(b);
System.out.println("person1:"+person1);
System.out.println("person2:"+person2);
}
}
@Override
public boolean equals(Object obj) {
// 增加一个判断,传递的参数obj是this本身,直接返回true,提高程序效率
if (obj==this){
return true;
}
// 增加一个判断,若传递的参数obj是null直接返回false,提高程序的效率
if (obj==null){
return false;
}
// 增加一个判断,是Person类型在转换,防止类型转换异常ClassCastException
if (obj instanceof Person){
//使用向下转型(强转)把Object类型转换为Person
Person person=(Person)obj;
// 比较两个对象的属性,一个是调用方法的this(person1),一个就是person(obj=person2)
boolean b=this.name.equals(person.name)&&this.age==person.age;
return b;
}
// 不是Person类型直接返回false
return false;
}