1,IDEA在debug时,当debug到某个对象时,会调用对象的toString()方法,用来在debug界面显示对象信息。
2,IDEA调用toString()方法时,即使在toString()方法中设置了断点,该断点也不会被触发,也就是说,开发者多数情况下不会知道toString()方法被调用了。
3,多数情况下调用一下toString()方法没有什么问题,但是也有例外,比如重写了toString()方法的类,随意的调用toString()方法会导致未知的问题。
4,比如Dubbo的AbstractConfig类,对这个类的debug会导致其子类ReferenceConfig的initialized属性错误的被修改为true,进而无法正确的生成Dubbo代理。
5,IDEA在debug时调用toString()方法的情况是可以在配置中关掉的,配置位置是:
红框的对号去掉就可以了。
下面是一个实例,验证了IDEA的这个问题:
一个测试类,重写了toString()方法,添加了额外的日志输出:
public class DebugBean {
private int id;
private String name;
@Override
public String toString() {
System.out.println("调用toString()");
return super.toString();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后是测试类:
public class Test {
public static void main(String[] args){
System.out.println("begin");
DebugBean debugBean=new DebugBean();
debugBean.setId(123);
System.out.println("end");
}
}
debug启动后的结果如下图:
说明确实调用了toString()方法。