6 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
// 循環(huán)執(zhí)行 10 次,會(huì)產(chǎn)生 10個(gè) {} 代碼塊,互不沖突
for (int i = 0;i < 10;i ++) { // ↓
int s = i; // 中間這一部分是 s 的作用域,出了作用域 s 是不存在的
} // ↑

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
首先s是int類型,屬于基本類型,不是Object類型,因此不存在“創(chuàng)建很多重復(fù)的s對(duì)象”之說(shuō)
這里創(chuàng)建的是int類型的變量,這個(gè)變量是存在棧里的
即使你把循環(huán)次數(shù)設(shè)置成Integer.MAX_VALUE,也不會(huì)報(bào)錯(cuò),具體原因不知道,不過(guò)編譯器會(huì)優(yōu)化代碼,使得實(shí)際上每次使用的都是同一塊內(nèi)存區(qū)域,而不是每次都開辟一塊新的內(nèi)存區(qū)域

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
1、首先你要理解的是這里并沒(méi)有一個(gè)名叫s的對(duì)象,代碼中的s,以及i,只不過(guò)是對(duì)象的引用,相當(dāng)于C語(yǔ)言中的指針,它只是指向這個(gè)對(duì)象空間的一個(gè)標(biāo)志。
2、你的每次的for循環(huán),都在聲明一個(gè)同名的引用,那么這時(shí)候編譯器是能夠分辨出來(lái)這些同名的引用的,所以無(wú)論循環(huán)多少次,實(shí)際上你只擁有一個(gè)名叫‘s’的引用。而且它初始化在第一次for循環(huán),以后的每次循環(huán)都是在給這個(gè)同名的引用賦值。
3、如果想看打印結(jié)果,把system.out放到局部變量的有效域內(nèi)。

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
1.這段代碼沒(méi)造對(duì)象,int是基本數(shù)據(jù)類型,不是對(duì)象。
2.這段代碼會(huì)被編譯器優(yōu)化,結(jié)果我猜可能是 int s = 9;
這樣的形式,你可以javap一下看看
添加回答
舉報(bào)