对象克隆
复制一个一模一样的新对象出来
浅克隆
拷贝出的新对象,与原对象中的数据一模一样(引用类型拷贝的只是地址)
深克隆
-
对象中基本类型的数据直接拷贝。
-
对象中的字符串数据拷贝的还是地址。
-
对象中包含的其他对象,不会拷贝地址,会创建新对象
package com.aiit.itcq;
import java.util.Arrays;
import java.util.Objects;
/**
* 应用程序入口类,演示对象克隆的概念和浅克隆的实现。
*/
public class App {
/**
* 主方法,用于运行对象克隆的演示。
*
* @param args 命令行参数
*/
public static void main(String[] args) {
// 创建原始对象
Student s1 = new Student("007", "张三", 25, new double[]{85, 90, 85});
// 打印原始对象信息
System.out.println(s1.toString());
try {
// 使用浅克隆创建新对象
Student s1_copy = (Student) s1.clone();
// 打印克隆对象信息
System.out.println(s1_copy.toString());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
/**
* 学生类,实现了Cloneable接口以支持对象克隆。
*/
class Student implements Cloneable {
private String id;
private String name;
private int age;
private double[] scores;
/**
* 无参构造方法
*/
public Student() {
}
/**
* 带参构造方法,用于初始化学生对象。
*
* @param id 学生ID
* @param name 学生姓名
* @param age 学生年龄
* @param scores 学生成绩数组
*/
public Student(String id, String name, int age, double[] scores) {
this.id = id;
this.name = name;
this.age = age;
this.scores = scores;
}
// 省略getter和setter方法
/**
* 重写equals方法,用于比较对象是否相等。
*/
@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(id, student.id) &&
Objects.equals(name, student.name) &&
Arrays.equals(scores, student.scores);
}
/**
* 重写hashCode方法,生成对象的哈希码。
*/
@Override
public int hashCode() {
int result = Objects.hash(id, name, age);
result = 31 * result + Arrays.hashCode(scores);
return result;
}
/**
* 重写toString方法,生成对象的字符串表示。
*/
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
", scores=" + Arrays.toString(scores) +
'}';
}
/**
* 克隆方法,实现浅克隆。
*
* @return 新的克隆对象
* @throws CloneNotSupportedException 如果对象不支持克隆
*/
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
/**
* 克隆方法,实现深克隆。
*
* @return 新的深度克隆对象
* @throws CloneNotSupportedException 如果对象不支持克隆
*/
// @Override
// protected Object clone() throws CloneNotSupportedException {
// Student clonedStudent = (Student) super.clone();
// clonedStudent.scores = this.scores.clone(); // 深克隆scores数组
// return clonedStudent;
// }
}
标签:Java,name,对象,Student,scores,id,克隆
From: https://www.cnblogs.com/itcq1024/p/18055540