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()方法。