1. 程式人生 > >一.基本數據類型和引用數據類型的區別

一.基本數據類型和引用數據類型的區別

判斷 註解 img string類型 圖片 值傳遞 傳遞 引用數據類型 區別

一、基本數據類型:

byte:Java中最小的數據類型,在內存中占8位(bit),即1個字節,取值範圍-128~127,默認值0

short:短整型,在內存中占16位,即2個字節,取值範圍-32768~32767,默認值0

int:整型,用於存儲整數,在內在中占32位,即4個字節,取值範圍-2147483648~2147483647,默認值0

long:長整型,在內存中占64位,即8個字節-2^63~2^63-1,默認值0L

float:浮點型,在內存中占32位,即4個字節,用於存儲帶小數點的數字(與double的區別在於float類型有效小數點只有6~7位),默認值0

double

:雙精度浮點型,用於存儲帶有小數點的數字,在內存中占64位,即8個字節,默認值0

char:字符型,用於存儲單個字符,占16位,即2個字節,取值範圍0~65535,默認值為空

boolean:布爾類型,占1個字節,用於判斷真或假(僅有兩個值,即true、false),默認值false

二.類、接口類型、數組類型、枚舉類型、註解類型。

區別:

基本數據類型在被創建時,在棧上給其劃分一塊內存,將數值直接存儲在棧上。

引用數據類型在被創建時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,然後由棧上面的引用指向堆中對象的地址。

三.String作為參數傳遞

1.

基本數據類型的值傳遞,不改變其值

2.引用數據類型的值傳遞,改變其值

3.String類雖然是引用數據類型,但它當做參數傳遞時和基本數據類型是一樣的

技術分享圖片

分析:當change方法執行完彈棧時,s(0x0022)值被當做垃圾回收消失,再輸出s是0x0011地址的String類型值

四.StringButter作為參數傳遞

技術分享圖片

分析:StringButter傳遞的是引用對象sb的地址值,兩個sb均在棧內存中,而都指向堆內存同一個new StringButter()[0x0011]

故能改變字符串值

一.基本數據類型和引用數據類型的區別