在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ Java 一個(gè)死循環(huán)問題

Java 一個(gè)死循環(huán)問題

看第一段代碼

public class Test {

    public Test test = new Test();

    public void say() {
        System.out.println("hello world!");
    }

    public static void main(String[] args) {
        new Test();
    }
}

上邊這段代碼會(huì)造成死循環(huán)并導(dǎo)致內(nèi)存溢出,接下來看第二段代碼

public class Test {

    public static Test test = new Test();

    public void say() {
        System.out.println("hello world!");
    }

    public static void main(String[] args) { 
        // 可以無限引用下去,但不會(huì)形成死循環(huán)
        new Test().test.test.test.test.test.say();
    }
}

上述第二段代碼中,new Test().test.test.test.test.test.say();可以無限引用,但是有沒有形成死循環(huán),這是為什么?有人可以從內(nèi)存角度分析一下上述第二種代碼嗎?

回答
編輯回答
離觴

new Test().test.test.test.test.test.say() == new Test().say() == Test.say()
new Test().test.test.test.test.test == new Test().test == Test.test。不管你調(diào)用多少次.test都是指向一個(gè)堆地址。

2017年6月8日 11:19
編輯回答
孤毒

static是靜態(tài)類變量,只有一份。雖然你是new出來的對(duì)象,也是可以調(diào)用類變量的。

2017年11月28日 13:12
編輯回答
半心人

第一個(gè)段代碼是在無線創(chuàng)建對(duì)象,每次都會(huì)消耗內(nèi)存創(chuàng)建新對(duì)象

第二段代碼類似兩個(gè)對(duì)象的互相引用,沒有新對(duì)象產(chǎn)生,沒有內(nèi)存消耗
A a = new A();
B b = new B();
a.b = b;
b.a = a;
這樣就能a.b.a.b.a.b這樣無線循環(huán)引用,但是無論寫了多少層,引用的都是這兩個(gè)對(duì)象

2018年5月1日 12:39
編輯回答
蔚藍(lán)色

第一段代碼new Test()時(shí)候會(huì)執(zhí)行public Test test = new Test(); ,之后繼續(xù)進(jìn)入new Test(),造成死循環(huán)、無限實(shí)例化,最后內(nèi)存溢出;
第二段代碼public static Test test = new Test(); 是在類加載的時(shí)候執(zhí)行,每次new Test()時(shí)候不會(huì)重復(fù)執(zhí)行,所以不會(huì)重復(fù)實(shí)例化變量

2017年8月27日 06:50