50,556
社区成员
发帖
与我相关
我的任务
分享
为了方便描述,我重新贴一下代码我不太清楚楼主开发工具是否是使用的IntelliJ IDEA.我使用的IntelliJ IDEA 2018.3.3,在单步调试时复现了楼主的结果. 我在代码的第4行和第10行打的断点. 我的控制台输出为:public class ToStringTest{ static inti= 1; public static void main(String args[]){ System.out.println("love " + new ToStringTest()); ToStringTest a = new ToStringTest(); a.i++; System.out.println("me " + a.i); } public String toString(){ System.out.print("I "); return "java "; } }
如果楼主是想问IntelliJ IDEA的单步调试时为什么会打印出这个结果,而不是与直接执行结果一致.那么答案是IntelliJ IDEA的一个默认设置导致这一结果.File | Settings | Build, Execution, Deployment | Debugger | Data Views | Java |Enable toString() object view 关闭后再单步调试,控制台输出:I I I love java I I me 2 I
参考: 1.https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000622624--skipped-breakpoint-at-because-it-happened-inside-debugger-evaluation-; 2.https://youtrack.jetbrains.com/issue/IDEA-178509#comment=27-2426329I love java me 2
obj对象+或+obj对象会调用toString是不对的,那是因为跟String对象相加,系统自动把obj转成String,所以才会调用toString方法,你可以试试跟别的类型相加,编译就报类型错误。你直接a+a为什么会报错,原因就在这里。
public class ToStringTest{
static inti= 1;
public static void main(String args[]){
System.out.println("love " + new ToStringTest());
ToStringTest a = new ToStringTest();
a.i++;
System.out.println("me " + a.i);
}
public String toString(){
System.out.print("I ");
return "java ";
}
}
我不太清楚楼主开发工具是否是使用的IntelliJ IDEA.我使用的IntelliJ IDEA 2018.3.3,在单步调试时复现了楼主的结果.
我在代码的第4行和第10行打的断点.
我的控制台输出为:
I I I love java
I I me 2
I
如果楼主是想问IntelliJ IDEA的单步调试时为什么会打印出这个结果,而不是与直接执行结果一致.那么答案是IntelliJ IDEA的一个默认设置导致这一结果.File | Settings | Build, Execution, Deployment | Debugger | Data Views | Java |Enable toString() object view 关闭后再单步调试,控制台输出:
I love java
me 2
参考:
1.https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000622624--skipped-breakpoint-at-because-it-happened-inside-debugger-evaluation-;
2.https://youtrack.jetbrains.com/issue/IDEA-178509#comment=27-2426329