让我们假设我们有一个实现Serializable的实体。在实体类中,我们有一个LocalDateTime字段。根据此Value-based classes规则,在反序列化的情况下可能会产生不可预测的结果。
因此,我们想将它们存储在http会话中,那么我的问题是在这种情况下可能的替代方案?
答案 0 :(得分:2)
您要链接的页面是
如果尝试,程序可能会产生不可预测的结果 将两个引用区分为基于值的类的相等值...
因此,对这些类的对象进行序列化和反序列化通常没有问题。如果序列化,例如LocalDateTime
并再次反序列化,则会得到一个与第一个对象相同的对象。这通常都是你需要的。
如果序列化两个对象并引用相同的 LocalDateTime
,则可能会得到两个对象,引用两个相等但不同的LocalDateTime
。或者反过来说,如果你通过引用两个不同但相等的LocalDateTime
序列化两个对象,它们理论上可以返回对同一个对象的引用。
这意味着,在反序列化后,可能会出现意外结果,例如
if (myLocalDateTime == myOtherLocalDateTime)
你问
在这种情况下可能有什么选择?
替代方案是:始终将此类对象与.equals
进行比较:
if (myLocalDateTime.equals(myOtherLocalDateTime))
然后你就安全了。