java toString方法导致程序栈崩溃原因

在模拟实现ioc过程中,因为想看看循环依赖注入的效果,就重写了toString方法,结果导致了栈崩溃。
大家都知道spring容器中的实例可以是单例的,这样有利于管理对象。
那么我们要在A中注入B,B中注入C,C中注入A,就会导致循环依赖。

public class ClassA {
    @AutoWired
    private ClassB b;
    public ClassB getClassb() {
        return b;
    }

    public void setB(ClassB b) {
        this.b = b;
    }

    @Override
    public String toString() {
        return "ClassA{" +
         "b=" + b +
         '}';
    }
}





 @Component
    public class ClassB {
        @AutoWired
        private ClassC c;
        public ClassC getClassc() {
            return c;
        }
    
        public void setC(ClassC c) {
            this.c = c;
        }
    
        @Override
        public String toString() {
            return "ClassB{" +
             "c=" + c +
             '}';
        }
    }


@Component
public class ClassC {
    @AutoWired
    private ClassA a;
    public ClassA getClassa() {
        return a;
    }

    public void setA(ClassA a) {
        this.a = a;
    }

    @Override
    public String toString() {
        return "ClassC{" +
         "a=" +a
         '}';
    }
}

通过重写了toString方法,我们只要随便打印一个对象,就会造成栈溢出。
在这里插入图片描述

原因分析,toString方法中打印的其他对象的toString会间接循环,导致你的方法一直在调用方法,且没有返回,每次调用导致栈上升,最后导致栈溢出,所以在使用toString方法时需要注意到递归问题,不要造成了死递归。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值