Object类是所有java类的根基类,也就意味着所有的java对象都拥有Object类的属性和方法。如果在类的声明中未使用extends关键子指明其父类,则默认继承Object类
==
注意:基本数据类型==引用数据类型时,比较的也是值是否相等
equals
补充:
@Override
public boolean equals(Object o) {
if (this == o) return true;//判断当前对象和o是否同一个对象
if (o == null || getClass() != o.getClass()) return false;//判断对象o是否为空,还有当前对象的运行时类型是否和o的相同
Person person = (Person) o;//向下转型后才能比较各个属性
return age == person.age && gender == person.gender && Objects.equals(name, person.name);
}
介绍:
重写:一般是输出对象的属性
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
注意:直接输出对象等价于直接调用toString()方法
重写
clone()方法是用于浅克隆或者深克隆一个java对象的,但是要注意一个误区:clone方法是Object类的,并不是Cloneable接口的,Cloneable只是一个标记接口,标记接口是用于标记实现该接口的类具有某种该接口标记的功能,常见的标记接口有三个:Serializable、Cloneable、RandomAccess,没有实现Cloneable接口,那么调用clone方法就会爆出CloneNotSupportedException异常。
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象
也就是说,一个默认的clone()方法实现机制,仍然是赋值。
深拷贝在浅拷贝的基础上,会将引用类型的引用对象再次复制一遍
package review;
/**
* @author 毕晶
* @date 2022/8/6 5:36 PM
*/
public class ShowCopy {
public static void main(String[] args) throws CloneNotSupportedException {
Person person = new Person("张三", 19, new Hobby());
Person copyPerson = (Person) person.clone();
System.out.println(copyPerson == person);//false
System.out.println(copyPerson.hobby == person.hobby);//浅拷贝时为true,因为拷贝了引用;深拷贝时false
}
}
class Person implements Cloneable {
String name;
int age;
Hobby hobby;
public Person(String name, int age, Hobby hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
}
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;
}
public Hobby getHobby() {
return hobby;
}
public void setHobby(Hobby hobby) {
this.hobby = hobby;
}
//浅拷贝
// @Override
// protected Object clone() throws CloneNotSupportedException {
// return super.clone();
// }
//深拷贝
@Override
protected Object clone() throws CloneNotSupportedException {
Person person = (Person) super.clone();
person.setHobby((Hobby) person.hobby.clone());
return person;
}
}
class Hobby implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Date转String
String转Date