方法名 | 说明 |
---|---|
public String toString() | 返回对象的字符串表示形式 |
public boolean equals(Object o) | 判断两个对象是否相等 |
protected Object clone() | 对象克隆 |
toString存在的意义:toString()方法存在的意义就是为了被子类重写,一般返回对象具体的内容。
equals存在的意义:直接比较两个对象的地址是否完全相同,完全可以用 “ == ” 替代equals,equals存在的意义就是为了被子类重写,一般子类自己来定制比较规则(不然比较对象内容)。
Student类
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
// 判断两个对象地址是否一样返回true
if (this == o) return true;
// 判断 o 是null直接返回false,或者比较者的类型与被比较者的类型不一样,返回false
if (o == null || getClass() != o.getClass()) return false;
// o不是null,且o一定是学生类型的对象,就开始比较内容了
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
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;
}
}
Test类
public class Test {
public static void main(String[] args) {
Student s1 = new Student("张三",18);
System.out.println(s1);
Student s2 = new Student("张三",18);
System.out.println(s2.equals(s1));
}
}
当某个对象调用这个方法时,这个方法会复制一个一模一样的新对象返回。
拷贝出的新对象,与原对象中的数据一模一样(引用类型拷贝的只是地址)
?
对象中基本类型的数据直接拷贝。
对象中的字符串数据拷贝的还是地址。
对象中还包含的其他对象,不会拷贝地址,会创建新对象。
??