1. 程式人生 > >淺談java中的值型別和引用型別

淺談java中的值型別和引用型別

1、值型別

(1)也就是基本的資料型別分為:四類八種

(2)四類:整型、浮點型、字元型、布林型

(3)八種:整型4種--byte、short、int、long

             浮點型2種--float、double

   字元型:char

       布林型:boolean

2、引用型別

除了四類八種的基本資料型別之外,所有的型別都是引用型別(陣列、字串、類、介面等)

3、值傳遞

基本資料型別的賦值都屬於值傳遞,值傳遞傳遞的是實實在在的變數值,是傳遞原引數的備份,值傳遞後,實參傳遞給形參的值,形參發生改變不影響實參。

  1. 引用傳遞

引用傳遞傳遞的是地址,形參改變會改變實參變變數的值

  1. 記憶體分配
  1. 值型別的記憶體

一個具有值型別的資料存放在棧內的一個變數中。既是棧內分配記憶體空間,直接儲存所包含的值,其值代表的資料本身

值型別的資料具有較快的存取速度

  1. 引用型別的記憶體

一個引用型別的資料的值會存放在堆中,變數名會存放在棧中,變數名在棧中的內容是值在堆中的地址。變數賦值或者傳遞的時候,是複製棧中的內容,也就是複製對應變數在堆中的地址

  1. 為什麼java有棧和堆之分?

當一個方法執行時,每個方法都會建立自己的記憶體棧,在這個方法內定義的變數將會逐個放入這塊記憶體裡,隨著方法的執行結束,這個方法的記憶體棧也就隨之銷燬了。因此,所有在方法中定義的變數都是放在棧記憶體中的;當我們在程式中建立一個物件時,這個物件將會被儲存在執行時資料區中,以便反覆利用(因為物件建立成本通常較大),在這個物件還可以被另一個引用變數所引用(方法的引數傳遞時很常見),則這個物件依然不會被銷燬。只有當一個物件沒有任何引用變數引用它時,系統的垃圾回收機制才會在合適的時候回收它。