AdvanceY 2021-07-03 20:17 采纳率: 57.1%
浏览 48
已采纳

关于Java中克隆的一个简单问题

Java中,如果是基本数据对象,比如整形、浮点型和布尔型数据类型的对象,那么无需克隆,赋值的时候自动生成了副本。
但是如果是对象数据类型,比如“Date”,那么就需要克隆技术中的深拷贝,否则将这个变量赋值给另外一个变量的结果就是两个变量引用了同一个对象。
而下面的
public tempClass clone() throws CloneNotSupportedException
方法中,我对“Date”变量没有克隆,直接赋值了。但是从修改了其中一个的时候,另外一个也没同时改变啊。最后的结果:

tempClass{a=1, a_date=Thu Feb 03 00:00:00 CST 1}
tempClass{a=1, a_date=Thu Feb 03 00:00:00 CST 1}(没有修改之前,对象和克隆对象都是1一样的)
tempClass{a=1, a_date=Sat Mar 04 00:00:00 CST 2}(修改了其中一个)
tempClass{a=1, a_date=Thu Feb 03 00:00:00 CST 1}(另外一个没有跟着改变?)

Process finished with exit code 0

import java.util.Date;
import java.util.GregorianCalendar;
import static java.lang.System.out;

public class temp {
    public static void main(String[] args) throws CloneNotSupportedException {

        var date = tempClass.g_date(1, 2, 3);
        var date2 = tempClass.g_date(2, 3, 4);

        var tempClass_obj = new tempClass(1, date);
        var tempClass_obj_2 = tempClass_obj.clone();

        out.println(tempClass_obj);
        out.println(tempClass_obj_2);

        tempClass_obj.setA_date(date2);

        out.println(tempClass_obj);
        out.println(tempClass_obj_2);
    }
}

class tempClass implements Cloneable
{
    private int a;
    private Date a_date;

    public tempClass(int a, Date a_date) {
        this.a = a;
        this.a_date = a_date;
    }

    public void setA_date(Date a_date) {
        this.a_date = a_date;
    }

    public tempClass clone() throws CloneNotSupportedException
    {
        var cloned = (tempClass) super.clone();
//        cloned.a_date = (Date) a_date.clone();
        cloned.a_date = a_date;// 问题所在!!!
        return cloned;
    }

    @Override
    public String toString() {
        return "tempClass{" +
                "a=" + a +
                ", a_date=" + a_date +
                '}';
    }

    public static Date g_date(int year, int month, int day)
    {
        Date date = new GregorianCalendar(year, month-1, day).getTime();
        return date;
    }
}
  • 写回答

2条回答 默认 最新

  • _Mr.Tree 2021-07-03 22:50
    关注

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥15 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码
  • ¥15 stm32标准库的PID角度环
  • ¥15 ADS已经下载好了,但是DAS下载不了,一直显示这两种情况,有什么办法吗,非常急!