一.基本數據類型和引用數據類型的區別
一、基本數據類型:
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
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]
故能改變字符串值
一.基本數據類型和引用數據類型的區別