做了個測驗,實體化后把當前實體也給了類的靜態屬性,然后我把靜態屬性=null,但實體本身還是在的,這是不是說明return物件時是值傳遞的,也就是做了物件的clone?
uj5u.com熱心網友回復:
你沒搞清楚物件和參考的關系,跟克隆毫無關系。首先,你不能自己銷毀物件,物件只能通過垃圾回識訓收。
所以,你把 靜態屬性=null 只是靜態屬性這個參考變數本身不再指向物件而已,跟物件本身存在不存在沒關系
比如
A a = new A(); //a是個變數,在堆疊里,new A是個物件,在堆里,相當你a手中有根線連著new A
A b = a; //b也是個變數,此時a和b同時指向一個物件(new A的實體),說明 b手中也有根線連著 new A
然后你修改 b = null; //那只是b不再參考物件了,也就是b手中的線和new A斷了,但是a還在手中的線還在,a還在參考new A,所以物件不會消亡
首先你要明白 變數賦值 和 物件創建(消亡)是兩碼事。變數賦值并不一定會創建新物件(比如上面b=a,沒有新物件創建,所以沒有克隆什么事),變數賦為null跟物件消亡也沒關系,物件是否消亡是垃圾回收管理的,垃圾回收器會判斷當前的物件還有沒有被其他變數參考,有的話就不回收,沒有的話也不一定會立即回收,可能只是標識為可以回收的物件而已
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/233182.html
標籤:Java EE
上一篇:idea 卡 build
