包裝類是不可變類,在構造了包裝類對象後,不允許更改包裝在其中的值。這句話究竟什麼意思,問了幾個人各種說法,例如 Integer it只是聲明一個引用。“引用”這種東西唯一的作用就是指向某個具體的東西,放在這裡來說,你初始化的時候,讓這個引用指向了21這個值,然後在it=22這裡又讓他指向了22。就好比說“我剛才代表21,現在我代表22”,改變的是這個引用,跟跳槽啊變心的戀人啊抗戰時的漢奸啊似的,但那些個值本身是不改變的,21還是21,22還是22. 不明白究竟裡面存的是什麼,存的引用地址嗎?但是不是已經變了麼?如果不是引用地址,那裡面存的什麼?來個明白的給說說。謝謝啦,最好有內存分配圖
引用好像是存在棧裡面的,21,22這些是存在堆裡面的。int a = 21; 是棧內的a指向堆內的21,。a = 22; 是本身a指向堆內的21現在變成指向堆內的22。但是堆裡面還是有21和22的,只是21現在沒被人引用而已,有可能會被system.gc()回收。<- 是我的理解,不一定對的
第一句“包裝類是不可變類,在構造了包裝類對象後,不允許更改包裝在其中的值”的意思可能是
Integer a = Integer.valueOf(22); 把int-> Integer.
但是a的方法裡面沒有改變22這個值的方法,只有Value,floatValue,byteValue這些轉換類型的方法。Integer還有很多靜態方法,那些靜態方法根本就不需要用到a,直接Integer.進制轉換,Integer.parst(),Integer.ValueOf()就可以。