问题集--栈异常StackOverFlow

报错信息

Exception in thread "main" java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:125)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at com.chasing.entity.TestBugEntity.toString(TestBugEntity.java:5)

是一个栈溢出的问题

问题原因和复现

是由于开发中使用到了neo4j图数据库,里面的数据结构看上去类似链表,如下图:image

而我们的数据中出现了一些数据的循环链,而对应的实体类是一个自己依赖自己的结构,类结构如下:

@Data
public class TestBugEntity {
    private Long id;

    private TestBugEntity testBugEntity;
}

由于递归引起,一个实体类中的一个属性是这个实体类本身

在这种场景下,如果出现一个循环依赖,而此时使用了@Data的注解,A的toString()方法会调用B的toString(),而B的toString()会调用A的toString()

这样会出现一个无限循环调用将会导致栈溢出

	
public static void testMethod() {
        TestBugEntity testBugEntity1 = new TestBugEntity();
        TestBugEntity testBugEntity2 = new TestBugEntity();
        testBugEntity1.setId(1L);
        testBugEntity2.setId(2L);
        //给entity2赋值entity1
        testBugEntity1.setTestBugEntity(testBugEntity2);
        //给entity1赋值entity2
        testBugEntity2.setTestBugEntity(testBugEntity1);

        System.out.println(testBugEntity1.toString());
}
	
posted on 2021-07-22 00:24  ChasingX  阅读(175)  评论(0)    收藏  举报