public static String toString(Object o) // 获取对象的字符串表现形式
public static boolean equals(Object a, Object b) // 比较两个对象是否相等
public static boolean isNull(Object obj) // 判断对象是否为null
public static boolean nonNull(Object obj) // 判断对象是否不为null
//public static boolean equals(Object a, Object b) 比较两个对象是否相等
public class objectdemo2 {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
System.out.println(s1.equals(s2));//比的是地址值
}
}
结果
重新父类的equals方法
cpp复制代码
@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);
}
如果我们比较属性值:
cpp复制代码
//public static boolean equals(Object a, Object b) 比较两个对象是否相等
public class objectdemo2 {
public static void main(String[] args) {
Student s1 = new Student("张三",18);
Student s2 = new Student("张三",18);
System.out.println(s1.equals(s2));//比的是属性值
}
}
结果
cpp复制代码
//public static boolean equals(Object a, Object b) 比较两个对象是否相等
public class objectdemo3 {
public static void main(String[] args) {
String s1 = "abc";
StringBuffer sb = new StringBuffer("abc");
System.out.println(s1.equals(sb));//false
//因为equals方法是被s1调用的,而s1是字符串
//所以equals要看String类中的
//如果是字符串,则比较内部属性值
//如果参数不是字符串,直接返回false
System.out.println(sb.equals(s1));//false
//因为equals方法是被sb调用的,而sb是不是字符串是StringBuffer
//所以equals要看StringBuffer类中的
//因为StringBuffer没有重写equals方法,所以默认使用的是父类object类的equals方法
//所以比较的是地址值
//而这里s1和sb的地址值不一样,所以返回false
}
}
public class objectdemo5 {
public static void main(String[] args) throws CloneNotSupportedException {
Day day = new Day(2024, 6, 6);
// 创建一个Animal对象
Animal a = new Animal("小黑", 2, day);
// 浅克隆这个Animal对象
//先是object cloneA=a.clone();
//然后强转成Animal类型
// Animal cloneA=(Animal)a.clone();
Animal cloneA = (Animal) a.clone();
System.out.println(cloneA);
}
}
cpp复制代码
package Object;
import java.util.Objects;
// 假设我们有一个简单的类Animal,它包含基本数据类型和另一个对象的引用
public class Animal implements Cloneable{
private String name;
private int age;
private Day day; 假设Day是另一个类,并且我们想要浅克隆它
public Animal(String name, int age, Day day) {
this.name = name;
this.age = age;
this.day = day;
}
public Animal() {
}
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 Day getDay() {
return day;
}
public void setDay(Day day) {
this.day = day;
}
// 重写clone方法以实现浅克隆
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
// toString方法(可选,但有助于调试)
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
", age=" + age +
", day=" + day +
'}';
}
}
cs复制代码
package Object;
public class Day {
private int year;
private int month;
private int day;
public Day(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public Day() {
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
@Override
public String toString() {
return "Day{" +
"year=" + year +
", month=" + month +
", day=" + day +
'}';
}
}