对象编组和解组是什么意思?当上述操作发生时,即序列化对hashCode
和equals
的影响,会对对象状态产生什么影响?
marshalling 指的是生成一系列字节流,其中包含足够的信息以便能够重新构建对象。
这不会影响原始对象,它是只读操作。unmarshalling 会导致创建另一个不相关的对象(通常情况下)。
复制可能具有相同的hashCode()
并且equals() == true
和compareTo() == 0
(假设它是可比较的)。
编组(Marshaling)与序列化(Serialization)几乎相同。区别在于远程对象处理,如rfc2713中所指定的(在Java上下文中)。
至于哈希码值:它取决于对象如何计算其哈希码。如果仅从字段计算,则显然与未编组的对象相等。但是,如果使用Object
的原始hashCode
,则它将是JVM给该对象的任意值,并且会因实例而异。
它用于保存对象或将它们发送到另一个Java世界中的VM,例如。 如果您已经编排了所有信息,则在编排后,对象将被重建为相同的对象。
例如,您可以标记字段,以便在序列化过程中丢失它们,然后无法完全重新创建对象。
很可能状态会丢失,这是因为通常不会序列化状态,而只会序列化bean所持有的数据。例如,您序列化字段地址。您不会序列化状态“2个人当前正在查看该对象”。
编组是将对象中存在的数据转换为XML格式并以XML格式查看它,而取消编组则是其反向操作,将XML文件转换为对象。