- 问题
调试代码的时候,发现有些变量赋值的代码没有进断点,就莫名其妙就被赋值了。
此时schemaMappingsLocation和schemaMappings的值都为null,按下F8
schemaMappingsLocation被赋值是正常的,schemaMappings的值怎么也有了???
同时idea左下角有一个如下图的提示
2. 排查
上面是调试的PluggableSchemaResolver类的构造方法,当构造方法执行完成,IDEA会默认调用该类的toString()方法。的确发现schemaMappings在PluggableSchemaResolver类的toString()被使用!
public String toString() {
// getSchemaMappings()中初始化了schemaMappings
return "EntityResolver using mappings " + getSchemaMappings();
}
3.解决
在设置中关掉自动执行toString()方法即可。

本文深入探讨了在使用IDEA调试代码时遇到的诡异现象:某些变量在未触及断点的情况下被赋值。通过细致的排查,发现IDEA在构造方法执行完毕后默认调用了toString()方法,进而解释了变量被意外初始化的原因。文章最后提供了关闭IDEA自动执行toString()方法的解决方案。

355

被折叠的 条评论
为什么被折叠?



