值類型和引用類型的區(qū)別是什么
值類型和引用類型經(jīng)常出現(xiàn)在JAVA等編程語言的書籍中,一些學(xué)習(xí)java的新手不是很懂這兩者的區(qū)別,下面小編為大家介紹值類型和引用類型的區(qū)別,感興趣的朋友們一起來看看吧!
值類型和引用類型的區(qū)別一、定義
值類型表示復(fù)制一個(gè)當(dāng)前變量傳給方法,當(dāng)你在這個(gè)方法中改變這個(gè)變量的值時(shí),最初生命的變量的值不會(huì)變。
引用類型表示你操作的數(shù)據(jù)是同一個(gè),也就是說當(dāng)你傳一個(gè)參數(shù)給另一個(gè)方法時(shí),你在另一個(gè)方法中改變這個(gè)變量的值,那么調(diào)用這個(gè)方法是傳入的變量的值也將改變。
通俗說法: 值類型就是現(xiàn)金,要用直接用;引用類型是存折,要用還得先去銀行取現(xiàn)。----(摘自網(wǎng)上)
值類型和引用類型的區(qū)別二、基本數(shù)據(jù)類型
值類型有四類八種
四類: 1,整型 2,浮點(diǎn)型 3,字符型 4,邏輯型
八種: 1,整型3種 byte,short,int,long
2,浮點(diǎn)型2種 float,double
3,字符型1種 char
4,邏輯型1種 boolean
引用類型除了四類八種基本類型外,所有的類型都稱為引用類型。
值類型和引用類型的區(qū)別三、值傳遞和引用傳遞
值傳遞
基本數(shù)據(jù)類型賦值都屬于值傳遞,值傳遞傳遞的是實(shí)實(shí)在在的變量值,是傳遞原參數(shù)的拷貝,值傳遞后,實(shí)參傳遞給形參的值,形參發(fā)生改變而不影響實(shí)參。
引用傳遞
引用類型之間賦值屬于引用傳遞。引用傳遞傳遞的是對(duì)象的引用地址,也就是它的本身(自己最通俗的理解)。引用傳遞:傳的是地址,就是將實(shí)參的地址傳遞給形參,形參改變了,實(shí)參當(dāng)然被改變了,因?yàn)樗麄冎赶蛳嗤牡刂贰?/p>
引用和我們的指針差不多,但是它不又不需要我們?nèi)ゾ唧w的操作。
值類型和引用類型的區(qū)別四、內(nèi)存分配
一個(gè)具有值類型(value type)的數(shù)據(jù)存放在棧內(nèi)的一個(gè)變量中。即是在棧中分配內(nèi)存空間,直接存儲(chǔ)所包含的值,其值就代表數(shù)據(jù)本身。值類型的數(shù)據(jù)具有較快的存取速度。
一個(gè)具有引用類型(reference type)的數(shù)據(jù)并不駐留在棧中,而是存儲(chǔ)于堆中。即是在堆中分配內(nèi)存空間,不直接存儲(chǔ)所包含的值,而是指向所要存儲(chǔ)的值,其值代表的是所指向的地址。當(dāng)訪問一個(gè)具有引用類型的數(shù)據(jù)時(shí),需要到棧中檢查變量的內(nèi)容,該變量引用堆中的一個(gè)實(shí)際數(shù)據(jù)。引用類型的數(shù)據(jù)比值類型的數(shù)據(jù)具有更大的存儲(chǔ)規(guī)模和較低的訪問速度。
值類型和引用類型的區(qū)別五、裝箱與拆箱
其實(shí)裝箱就是值類型到引用類型的轉(zhuǎn)化過程。將一個(gè)值類型變量裝箱成一個(gè)引用類型變量,首先會(huì)在托管堆上為新的引用類型變量分配內(nèi)存空間,然后將值類型變量拷貝到托管堆上新分配的對(duì)象內(nèi)存中,最后返回新分配的對(duì)象內(nèi)存地址。裝箱操作是可逆的,所以還有拆箱操作。拆箱操作獲取只想對(duì)象中包含值類型部分的指針,然后由程序員手動(dòng)將其對(duì)應(yīng)的值拷貝給值類型變量。
猜你感興趣:
值類型和引用類型的區(qū)別是什么
上一篇:堆和棧的區(qū)別