浅谈List保存的数据是引用数据类型的地址
淺談List保存的數(shù)據(jù)是引用數(shù)據(jù)類型的地址
今天一個(gè)初學(xué)javaweb的朋友問我一個(gè)bug,經(jīng)過和別人 討論分析了解到List對(duì)象細(xì)節(jié)上的一些問題,我將代碼重新簡化構(gòu)造了一下做成了一個(gè)例子。上代碼:
?
得到的結(jié)果:
?
咋一看,無非就是第一個(gè)循環(huán)沒有循環(huán)創(chuàng)建test對(duì)象,第二個(gè)循環(huán)創(chuàng)建了test對(duì)象。
按照邏輯test在循環(huán)數(shù)據(jù)都進(jìn)行了更新,然后再加入到list對(duì)象的,若不考慮list引用數(shù)據(jù)類型地址問題,第一個(gè)print和第二個(gè)print會(huì)都會(huì)輸出[0,1,2,3,4]。
事實(shí)上,這和list引用數(shù)據(jù)類型地址有關(guān),由于list存放的是一個(gè)對(duì)象的地址,而不是這個(gè)對(duì)象的值,所以當(dāng)對(duì)象更新之后,之前加入list對(duì)象的test的值會(huì)因?yàn)閠est的對(duì)象更新,但對(duì)象地址沒有發(fā)生變化,所以當(dāng)list遍歷的時(shí)候,由于是存放的地址,我們會(huì)取到同一個(gè)test對(duì)象,而對(duì)象的值也更新成了最后一個(gè)循環(huán)所賦的值。
簡單的說:第一個(gè):list里面存的是 【地址4,地址4,地址4,地址4】list并不是存的 【值1,值2,值3,值4.....】
? ? ? ? ? ? ? ? ? 第二個(gè):list里面存的是 【地址1,地址2,地址3,地址4】而我們往往需要的是結(jié)果二,而不是結(jié)果一。
總結(jié)
以上是生活随笔為你收集整理的浅谈List保存的数据是引用数据类型的地址的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Python的开源人脸识别库:离线识
- 下一篇: 英伟达宣布全面支持ARM高性能计算,三周