江城fen
2018-03-19 20:25:32
為什么打印b不是等于[4,44]?而是[4],按照引用數(shù)據(jù)的邏輯,b和a指向的是同一個地址,a作改變b也應該作改變
1 回答
已采納

千秋此意
TA貢獻158條經(jīng)驗 獲得超188個贊
你要理解將一個引用類型的值(對象)賦值給變量時,該變量保存的值實際上只是一個指向內存中該對象的指針、一個地址,而不是該對象本身。
?
你只有通過變量a中保存的這個指針去操作內存中的對象并使其發(fā)生改變后,再通過b去訪問該對象時,才會出現(xiàn) "我改變了a,所以b也跟著改變了" 這種錯覺,實際上在以上操作前提下,a和b都沒有發(fā)生過改變,改變的只是內存中的那個對象。
你這個demo的問題出在第12行,你在這里通過字面量的方式創(chuàng)建了一個新的引用類型的值,并將其引用賦值給了變量a,此時變量a中所保存的值也就變成了指向這個新的對象在內存中地址的指針了,而b還是指向第一個對象,所以你打印b就還是輸出 "[4]"
再然后在14行,你又將b所保存的值賦值給了a, 此時b和a再次指向一開始所創(chuàng)建的那個對象(即“[4]”),然后你在第15行通過"b.push"來操作了該對象,使對象的值發(fā)生了改變,因為此時a和b指向同一對象,所以在16行通過a去訪問該對象時自然打印出改變后的值,即 "[4,44]"
ps:如果以上回答能對你有所幫助萬望采納~
添加回答
舉報
0/150
提交
取消