最近在研究LinedList源码遇到一个问题。看下图,在我的理解看来双向链表属于两个Node之间循环引用,为什么不会内存溢出?而我重写toString并打印就内存溢出了?

图片说明图片说明

重写toString返回值里的prev和next是节点,和打印的prev一样,你在套娃,打印的prev -> 调用toString -> 返回prev -> 调用toString -> 返回prev.....

你调用 prev 的 toString 方法 , 会去调用 prev.prev.toString 方法, 接着去调用 prev.prev.prev.toString , 相当于你一直在这个链表里面转圈圈 , 不停的调用toString方法, 方法又是存在栈里 , 直到你把这个栈塞满 , 就会报StackOverFlowError