Sean's Note: Primitive type & Reference type

2012年12月29日 星期六

Primitive type & Reference type

在 Java 裡,型別被分為兩大類 Primitive type 和 Reference type,

有八個型別屬於 Primitive type,分別是 boolean, char, byte, short, int, long, float, double,

其他如 String, Array 和使用者自定義的 class 則屬於 Reference type。

而兩者重要的差別在於,當變數被當作函式的參數傳遞時,

Primitive type 的值不因函式運算而改變。

Reference type 的值會因函式運算而改變 (除了 String 以外!)。

大多人會覺得那這不就是 C++ 中的 call by reference 嗎?

其實都是 call by value,因為 Java 不允許處理記憶體位置。

 (詳見: http://openhome.cc/Gossip/JavaEssence/CallByValue.html)。

String 雖然是 Reference type,但在函式裡更改其值,並不影響外部變數的結果,

這是因為 str = "Hello" 等同於 str = new String("Hello"),str 指向了新的記憶體空間,

所以不會更動到原本的記憶體。

沒有留言:

張貼留言