Java 有没有一种方法可以将日期对象复制到另一个日期对象而不使用引用?

Java 有没有一种方法可以将日期对象复制到另一个日期对象而不使用引用?,java,Java,我得到了一个程序,它加载原始数据以绘制图表,并将其存储在一个名为cRawGraph的类中。。然后它格式化这些数据并将其存储在另一个名为cFormatGraph的类中。是否有办法将cRwGraph中存储的某些日期对象复制到cFormattedGraph中存储的日期对象而不使用引用?我查看了Oracle的文档,没有看到一个构造函数可以接收日期对象或任何方法数据来实现这一点 代码段: do{ d=rawData.mDate[i].getDay(); da=rawData

我得到了一个程序,它加载原始数据以绘制图表,并将其存储在一个名为
cRawGraph
的类中。。然后它格式化这些数据并将其存储在另一个名为
cFormatGraph
的类中。是否有办法将
cRwGraph
中存储的某些日期对象复制到
cFormattedGraph
中存储的日期对象而不使用引用?我查看了Oracle的文档,没有看到一个构造函数可以接收日期对象或任何方法数据来实现这一点

代码段:

do{
        d=rawData.mDate[i].getDay();
        da=rawData.mDate[i];
        datept=i;
        do{
          vol+=rawData.mVol[i];
          pt+=rawData.mPt[i];
          c++;
          i++;
          if (i>=rawData.getSize())
              break;
          } while(d==rawData.mDate[i].getDay());

        // this IS NOT WORKING BECOUSE IT IS A REFRENCE AND RawData gets loaded with new dates,
        // Thus chnaging the value in mDate
        mDate[ii]=da;

      mVol[ii]=vol;
      mPt[ii]=pt/c;
      if (first)
      {
          smallest=biggest=pt/c;
          first=false;
      }
      else
      {
          double temp=pt/c;
          if (temp<smallest)
              smallest=temp;
          if (temp>biggest)
              biggest=temp;

      }
      ii++;
    } while(i<rawData.getSize());  
do{
d=rawData.mDate[i].getDay();
da=rawData.mDate[i];
datept=i;
做{
vol+=rawData.mVol[i];
pt+=rawData.mPt[i];
C++;
i++;
如果(i>=rawData.getSize())
打破
}而(d==rawData.mDate[i].getDay());
//这不起作用,因为它是一个参考,并且原始数据会加载新的日期,
//因此,更改mDate中的值
mDate[ii]=da;
mVol[ii]=体积;
mPt[ii]=pt/c;
如果(第一)
{
最小=最大=pt/c;
第一个=假;
}
其他的
{
双温=pt/c;
如果(最大)
最大值=温度;
}
ii++;
}而(i您可以使用getTime()并将其传递到日期(时间)构造函数中。这是必需的,因为日期是可变的

Date original = new Date();
Date copy = new Date(original.getTime());

如果您使用的是Java 8,请尝试使用新的。因此无需复制/克隆。

如果可能,请尝试切换到使用Joda Time而不是内置日期类型

Joda提供的DateTime有一个副本构造函数,通常使用起来更好,因为DateTime是不可变的

否则,您可以尝试:

Date newDate = new Date(oldDate.getTime());

使用Java8可以使用以下空安全代码

Optional.ofNullable(oldDate)
               .map(Date::getTime)
               .map(Date::new)
               .orElse(null)

我不知道你在问什么,但你可以使用
b=newdate(a.getTime())
b=(Date)a.clone();
来克隆日期对象。顺便说一句:你的示例代码实际上不包含“Date”一词。Java 8不是自带了这个JodaTime类的自己的版本,所以你不再需要使用joda了吗?@DanielKaplan不是,joda Time还活着,而且很好。虽然joda Time确实激发了Java 8中内置的新Java.Time包,但Java.Time是重新设计的。因此,Java.Time不是joda Time的替代品。joda Time和Java.Time都有另一个缺少的优点和功能。两者都是正在进行的活动项目。它们不是相互排斥的;您可以在项目中使用它们(只是小心导入,因为一些类名恰好相同)。扩展java.time以添加更多功能。您好,感谢您的回答。您能解释什么是不可变的吗?不可变的意思“无法更改”即日期是固定的,这意味着您可以安全地传递对象,而无需担心客户机代码更改值,也无需克隆对象。