我知道反序列化会创建Singleton的另一个实例。但为什么 ?它是否在内部调用私有构造函数?在什么实例上调用readResolve方法,如果反序列化的实例是一个完全不同的实例?
编辑:这个问题是关于不是枚举的传统单身人士。 建议的现有答案不同,因为它没有解释如何在内部调用readResolve。因此,不应将此问题标记为重复。
答案 0 :(得分:0)
反序列化的事情是:它在某种程度上是黑魔法。
JVM在内部完成;它可以不用调用任何构造函数。基本上它的工作原理如下:
因此,是的;当你序列化一个单身人士时;并且在同一个JVM中对其进行反序列化,很有可能创建表示相同单例的两个对象。
这种二进制(反)序列化的许多奇怪的副作用之一。