您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java自引用造成的死循环

星拱北辰 发布时间:2019-12-04 12:02:29 ,浏览量:0

声明

本文不为博眼球,只是今天脑洞一开,日常嗨皮罢了。 没什么技术含量,只不过是一个引用持有的问题而已,不喜欢可以走,但不要乱喷,谢谢~~

代码
public class Clazz {
    
    private Clazz obj;
    
    public Clazz() {
        //自引用
        this.obj = this;
    }

    public Clazz getObj() {
        return obj;
    }

    public void setObj(Clazz obj) {
        this.obj = obj;
    }
    
    public void print1() {
        while (this.obj != null) {
            System.out.println("没有尽头");
        }
        System.out.println("你看不到的,嘿嘿");
    }
    
    public void print2(Clazz obj) {
        Clazz next = obj.getObj();
        if (next != null) {
            System.out.println("没有尽头");
            print2(next);
        }
        System.out.println("你看不到的,嘿嘿");
    }
    
    public static void main(String[] args) {
        Clazz obj = new Clazz();
        //obj.print1();
        obj.print2(obj);
    }

}

运行起来的亚子
  • obj.print1():死循环……
  • obj.print2(obj):Exception in thread “main” java.lang.StackOverflowError……
原理分析

在这里插入图片描述

如上图,比较简陋,无非就是对象持有自己类型的一个属性,属性的引用指向自己本身,也就是说从来都是它自己本身,所以—— 你写非递归就是死循环;递归就是无穷递归导致堆栈溢出。

提醒

在处理引用的时候要小心,虽然本例这种低级错误一般人不会犯错,但谁又能保证永远不会错在引用上呢? 小心驶得万年船呀~~

关注
打赏
1660750074
查看更多评论
立即登录/注册

微信扫码登录

0.0419s