为什么HashMap中的entryset调用entryset0而不是直接写
Set <Map.Entry <K, V >> es = entrySet;
! return es = null es: (entrySet = new EntrySet ());
在writeObject方法中直接调用entrySet0,是不是因为可以覆盖entrySet方法?
答案 0 :(得分:0)
你的解释是最合理的。这是为了将HashMap的实现与覆盖子类型中entrySet()
方法的人的影响隔离开来。
我能想到的唯一其他解释是,这是从类的一些旧版本遗留下来的,我不希望Java开发人员会在这里发生这种情况。 (这是代码上有很多眼球......)
无论哪种方式,它可能对性能没有任何影响。 JIT编译器可能会内联调用...除非 的子类HashMap
覆盖entrySet()
。