版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21727627/article/details/79005620
1.一个是在jvm init()初始化成员变量时
public class TestNull {
private TestNull aNull=new TestNull();
public static void main(String[] args) {
TestNull testNull=new TestNull();
}
@Override
public String toString() {
return "你好"+this;
}
}
init 方法的字节吗如下:
0 aload_0
1 invokespecial #1 <java/lang/Object.<init>>
4 aload_0
5 new #2 <TestNull>
8 dup
9 invokespecial #3 <TestNull.<init>> 原因在这里重复调用了
12 putfield #4 <TestNull.aNull>
15 return
2.在原来的代码上添加上并注释掉成员变量或者改成static也行: System.out.println(testNull)造成无限的调用toString();
ps:应该没有人写这蛋疼的代码,记录一下.