int 與 Integer 核心差異
一、類型本質
int:基本類型,值類型,默認值 0,比較值。
Integer:包裝類,引用類型,默認值 null,比較地址;方法內變量需顯式初始化。
二、字符串轉數字
String s = "1";
int a = Integer.parseInt(s); // 返回 int
Integer b = Integer.valueOf(s); // 返回 Integer
Integer c = Integer.valueOf(1); // 返回 Integer
// 隱式拆箱:int d = Integer.valueOf(s); // 編譯器自動轉換
三、比較陷阱
| 代碼 | 結果 | 解析 |
int a=1; Integer b=1; a==b | true | b 自動拆箱為 int 比較值 |
Integer a=new Integer(1); Integer b=1; a==b | false | a 在堆,b 在常量池,地址不同 |
Integer b=1; Integer c=1; b==c | true | 常量池緩存 -128~127,同一對象 |
Integer d=128; Integer e=128; d==e | false | 超出緩存範圍,新建對象 |
四、正確比較 Integer 值
Integer a = new Integer(1);
Integer b = new Integer(2);
a.intValue() == b.intValue(); // true/false
a.equals(b); // 推薦,內部比較值
五、常用常量
int max = Integer.MAX_VALUE; // 2^31-1
int min = Integer.MIN_VALUE; // -2^31
六、使用場景限制
- 方法參數只接受對象類型。
- 泛型只支持對象類型(如
List<Integer>)。
- 數據庫字段可為 NULL,持久層實體類用包裝類接收
null。
