首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 基礎進階:原始型別與參考型別的記憶體語義差異完全解析

     編輯:Java 程式設計入門

Java 提供兩大型別家族:原始型別與參考型別,並為每個原始型別提供封裝類別。二者在記憶體佈局、語義行為、預設值、方法呼叫等方面存在本質差異,搞混將導致難以診斷的邏輯錯誤。

型別對照與記憶體模型

原始型別封裝類別位元大小
booleanBoolean1 位元(JVM 以 32 位元儲存)
byteByte8
charCharacter16
shortShort16
intInteger32
longLong64
floatFloat32
doubleDouble64

關鍵差異速覽

  • 儲存內容:原始型別直接存數值;參考型別存物件在堆疊上的位址指標(32 位元系統佔 4 位元組)。
  • 建立方式:原始型別無需 new;參考型別需 new 配置堆疊記憶體。
  • 方法呼叫:原始型別不可呼叫方法(5.hashCode() 編譯錯誤);封裝物件可(new Integer(5).hashCode())。
  • 預設值:實例欄位原始型別為 0/false/\u0000;參考型別為 null。

經典陷阱:指派與別名效應

Point x = new Point(0,0);
Point y = new Point(1,1);
x = y;        // x、y 指向同一物件
x.setLocation(5,5); // y 也變成 (5,5)!

指派運算子 = 對參考型別僅複製位址,產生別名。原始型別則複製數值本身,互不干擾。此差異是新手最易踩的坑。

最佳實務

  • 優先使用原始型別(效能、記憶體優勢),除非需要 null 語義、放入集合、或呼叫方法。
  • 比較封裝物件內容請用 equals(),勿用 ==。
  • 理解自動裝箱/拆箱(JDK 5+)背後的物件建立開銷,避免循環中無意識產生大量暫時物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved