本来应该是在你第一次调用了entrySet()方法之后,在方法中new 一个EntrySet 赋给entrySet变量的。但是!!!你一debug情况就悄悄发生了变化!!!当你创建hashMap对象map的代码一走完,debugger为了显示map内容到代码后面(即 map: {} ),马上暗中调用map.toString() ,而hashMap的toString继承自父类AbstractMap,执行的第一句就调用了entrySet()!!这时entrySet真的还是null,就会new EntrySet,然后赋给entrySet。所以早在你写 map.entrySet()之前,entrySet()已经被debugger调用过,map的entrySet变量已不为null了。
而当你把settings里的debugger的 enable toString object view取消掉之后。
这时debugger将不再暗中调用toString,走完这一行,entrySet依然为null。
这时,再走到我们自己调用的entrySet()时,就会显示entrySet = null,会new 一个EntrySet。