为了简单起见,假设我有一个 arraylist allBooks
包含类“books”和一个 arraylist someBooks
包含一些但不是所有的“books”。
当我想查看一个数组列表中的一本书是否也包含在另一个数组列表中时,使用 contains() 方法效果很好。
问题是,当我将两个 Arraylists 保存到 .bin 文件并在程序重新启动后将它们加载回来时,这不再有效。进行与之前相同的测试,即使比较的对象相同(内部信息相同),contains() 也会返回 false。
我通过重载 equals 方法解决了它并且它工作正常,但我想知道为什么会这样?
最佳答案
您将必须提供自己的哈希码和 equals 实现。默认情况下,它将简单地使用指针相等性,这在对象被“克隆”(序列化/反序列化循环)后显然会失败。
关于c# - Arraylist 在从磁盘加载后无法比较对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711401/