系統整理 Java 八大基本型別分類、預設儲存精度、強制轉型規則,深入剖析 String 物件不可變特性、字串常量池機制與 new String() 與字面值賦值的記憶體差異。
| 分類 | 型別 | 位元數 | 預設值 |
|---|---|---|---|
| 整數 | byte | 8 | 0 |
| short | 16 | 0 | |
| int | 32 | 0 | |
| long | 64 | 0L | |
| 浮點數 | float | 32 | 0.0f |
| double | 64 | 0.0 | |
| 字元 | char | 16 | '\u0000' |
| 布林 | boolean | 1 (邏輯) | false |
跨平台固定長度:不隨作業系統/CPU 架構變化。
int (32-bit)。double (64-bit)。float f = 1.0; 編譯錯誤 (double → float 精度損失),需 float f = (float)1.0; 或 1.0f。String 唯一可用 = 直接賦值字面值的物件。String s1 = "abc"; // 字面值:檢查常量池,有則複用
String s2 = "abc"; // s2 == s1 → true (同一物件)
String s3 = new String("abc"); // 新建物件,堆上配置
String s4 = new String("abc"); // s3 != s4 → false (不同物件)
String s = "abc";
s = "def"; // 非修改原物件,而是指向新物件 "def","abc" 仍在常量池 (若無其他引用可能被 GC)
不可變帶來的好處:執行緒安全、常量池複用、HashCode 快取、安全性 (參數傳遞不會被竄改)。