gpt4 book ai didi

java - 新的 SimpleDateFormat 始终为给定的 dateFormat 返回相同的引用

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:52 26 4
gpt4 key购买 nike


我试图通过跨多个线程使用 SimpleDateFormat 的相同实例来复制错误。然而,我遇到了另一个问题,并且没有找到任何答案。

这个简单的代码块复制了我所看到的问题。

DateFormat d1 = new SimpleDateFormat("ddMMyyyy");
DateFormat d2 = new SimpleDateFormat("ddMMyyyy");
DateFormat d3 = new SimpleDateFormat("ddMMyy");
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println("d3 = " + d3);

在java 7(1.7_0_21)下此操作结果如下

d1 = java.text.SimpleDateFormat@c5bfbc60
d2 = java.text.SimpleDateFormat@c5bfbc60
d3 = java.text.SimpleDateFormat@b049fd40

正如您所看到的,虽然我为 d1 和 d2 创建新对象,但它们最终是相同的引用。由于模式不同,d3 最终成为一个新实例。

java编译/运行时是否进行此优化?任何指示都会有帮助

最佳答案

SimpleDateFormatDateFormat (SimpleDateFormat 父类(super class))和 Format (DateFormat 父类(super class))都实现了 toString(),因此实际上执行了 Object 类中的 toString(),其代码为:

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

现在,SimpleDateFormat hashCode 已生成:

public int hashCode()
{
return pattern.hashCode();
// just enough fields for a reasonable distribution
}

这意味着,如果您创建多个具有相同模式SimpleDateFormat实例(就像您的情况一样),它们将具有相同的hashCode,因此toString()将为这些实例返回相同的值。

此外,正如 rixmath 所发现的那样,具有相同 patternSimpleDateFormat 实例也将是相等的。

关于java - 新的 SimpleDateFormat 始终为给定的 dateFormat 返回相同的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46138451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com