看到這樣一個(gè)題目牢贸,不知道如何入手竹观。從網(wǎng)上看來別人如何實(shí)現(xiàn)的,互相交流潜索。我們知道java中臭增,string這種類型會(huì)使用共享池。且看下面兩個(gè)例子:
(1)
上面的代碼最終輸出的是true竹习,按照J(rèn)ava對象的申請?jiān)瓌t來說誊抛,這里應(yīng)該是false才對。正是因?yàn)镴VM在實(shí)現(xiàn)的時(shí)候整陌,默認(rèn)生成了一些 Integer對象的實(shí)例拗窃,當(dāng)需要的實(shí)例是池子中已經(jīng)存在的數(shù)值時(shí)瞎领,直接返回已經(jīng)生成的對象的引用,不必新構(gòu)造對象随夸。這樣可以極大減少實(shí)例數(shù)目和程序運(yùn)行 性能九默。
(2)
Integer 對象,看源碼后也會(huì)使用共享池緩存-128到127之間的整形數(shù)據(jù)逃魄。這里面使用一個(gè)叫cache數(shù)組荤西,這個(gè)數(shù)組下標(biāo)從0-255依次先存放的是-128到127之間256個(gè)數(shù)。cache【132】開始存放的是4伍俘,cahce【133】存的是5邪锌,在執(zhí)行賦值操作array【132】=array【133】后,array【132】=5了癌瘾。2 + 2 會(huì)去找原來的位置觅丰,即array【132】,此時(shí)值已經(jīng)變成5了妨退。