標籤:
[定義]
參考型別表示你操作的資料是同一個,也就是說當你傳一個參數給另一個方法時,你在另一個方法中改變這個變數的值,那麼調用這個方法是傳入的變數的值也將改變.
實值型別表示複製一個當前變數傳給方法,當你在這個方法中改變這個變數的值時,最初生命的變數的值不會變.
通俗說法: 實值型別就是現金,要用直接用;參考型別是存摺,要用還得先去銀行取現。----(摘自網上)
[實值型別]也就是基礎資料型別 (Elementary Data Type)
基礎資料型別 (Elementary Data Type)常被稱為四類八種
四類: 1,整型 2,浮點型 3,字元型 4,邏輯型
八種:
1,整型3種 byte,short,int,long
2,浮點型2種 float,double
3,字元型1種 char
4,邏輯型1種 boolean
[參考型別]
除了四類八種基本類型外,所有的類型都稱為參考型別
在弄清楚實值型別與參考型別之後,最後一點就是值傳遞與引用傳遞,這才是關鍵
[值傳遞]
基礎資料型別 (Elementary Data Type)賦值都屬於值傳遞,值傳遞傳遞的是實實在在的變數值,是傳遞原參數的拷貝,值傳遞後,實參傳遞給形參的值,形參發生改變而不影響實參。
[引用傳遞]
參考型別之間賦值屬於引用傳遞。引用傳遞傳遞的是對象的引用地址,也就是它的本身(自己最通俗的理解)。引用傳遞:傳的是地址,就是將實參的地址傳遞給形參,形參改變了,實參當然被改變了,因為他們指向相同的地址。
引用和我們的指標差不多,但是它不又不需要我們去具體的操作
[記憶體配置]
一個具有實值型別(value type)的資料存放在棧內的一個變數中。即是在棧中分配記憶體空間,直接儲存所包含的值,其值就代表資料本身。實值型別的資料具有較快的存取速度。
一個具有參考型別(reference type)的資料並不駐留在棧中,而是儲存於堆中。即是在堆中分配記憶體空間,不直接儲存所包含的值,而是指向所要儲存的值,其值代表的是所指向的地址。當訪問一個具有參考型別的資料時,需要到棧中檢查變數的內容,該變數引用堆中的一個實際資料。參考型別的資料比實值型別的資料具有更大的儲存規模和較低的訪問速度。
[Java 中的記憶體回收機制]
當一個堆記憶體中的對象沒有被棧記憶體中表示地址的值“引用”時,這個對象就被稱為垃圾對象,它無法被使用但卻佔據著記憶體中的地區,好比這樣:
String s = new String(“person”); s = new String(“man”); s本來是指向堆記憶體中值為person的對象的,但是s突然討厭person了,它指向了堆記憶體中的man對象了,person就像一個孤兒一樣被s遺棄了,但是person比孤兒還要慘,因為沒有什麼能找的到它,除了位高權重的‘記憶體回收行程’,不過被當官的找到往往沒什麼好事,尤其是這個‘記憶體回收行程’,它會豪不留情把‘垃圾’們清理走,並且無情的銷毀,以便釋放記憶體。
[裝箱與拆箱]
其實裝箱就是實值型別到參考型別的轉化過程。將一個實值型別變數裝箱成一個參考型別變數,首先會在託管堆上為新的參考型別變數分配記憶體空間,然後將實值型別變數拷貝到託管堆上新分配的對象記憶體中,最後返回新分配的對象記憶體位址。裝箱操作是可逆的,所以還有拆箱操作。拆箱操作擷取只想對象中包含實值型別部分的指標,然後由程式員手動將其對應的值拷貝給實值型別變數。
實值型別和參考型別