Java 基本類型與包裝類詳解
在 Java 開發中,理解 基本數據類型與包裝類、字符串處理、以及高精度計算類是非常核心的能力。這不僅關系到程序性能,還影響代碼的正確性和可維護性。本文將詳細講解這些知識點,并給出常見的使用技巧和陷阱。
1?? 基本數據類型與引用類型的區別
Java 中有兩種數據類型:
類型 | 示例 | 存儲方式 | 特點 |
---|---|---|---|
基本數據類型 | int、long、double、boolean、char | 棧 | 存儲實際值,效率高,占用空間小 |
引用數據類型 | Integer、String、數組、對象 | 堆 | 存儲對象地址,支持方法調用,可為 null |
注意點:
- 基本類型默認值有固定值(如 int=0, boolean=false)
- 引用類型默認值是
null
- 基本類型操作速度快,引用類型功能豐富
2?? 包裝類
Java 為每個基本類型提供了對應的包裝類:
基本類型 | 包裝類 |
---|---|
int | Integer |
long | Long |
double | Double |
boolean | Boolean |
char | Character |
作用:
- 可以作為對象使用(如集合中存儲)
- 提供一些工具方法(如 Integer.parseInt()、Double.valueOf())
示例:
int a = 10;
Integer b = Integer.valueOf(a); // 基本數據類型-->包裝類 裝箱
int c = b.intValue(); // 包裝類-->基本數據類型 拆箱
3?? 自動裝箱 / 拆箱
從 Java 5 開始,Java 支持 自動裝箱 和 自動拆箱:
Integer x = 100; // 自動裝箱,相當于 Integer.valueOf(100)
int y = x; // 自動拆箱,相當于 x.intValue()
注意點:
- 裝箱/拆箱涉及對象創建和方法調用,過度使用可能影響性能
==
比較包裝類時要注意:小整數緩存(-128~127)可能導致==
為 true,大整數則可能為 false
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true
Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false
4?? String 與 StringBuilder / StringBuffer
4.1 不可變 vs 可變
- String:不可變,每次修改都會生成新對象
- StringBuilder / StringBuffer:可變,適合大量字符串拼接
- 線程安全:
- StringBuilder:非線程安全
- StringBuffer:線程安全(同步方法)
示例:
String str = "Hello";
str += " World"; // 每次拼接都會生成新對象StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 原對象修改,不生成新對象
5?? Math 類常用方法
java.lang.Math
提供大量常用數學方法:
Math.abs(-10); // 絕對值
Math.max(3, 7); // 最大值
Math.min(3, 7); // 最小值
Math.pow(2, 3); // 冪
Math.sqrt(16); // 平方根
Math.round(3.6); // 四舍五入
Math.random(); // 生成 0~1 隨機數
6?? BigInteger / BigDecimal(高精度計算)
6.1 BigInteger
- 支持任意精度整數運算
- 常用于大數計算或加密算法
BigInteger big1 = new BigInteger("12345678901234567890");
BigInteger big2 = new BigInteger("98765432109876543210");
BigInteger sum = big1.add(big2);
System.out.println(sum);
6.2 BigDecimal
- 支持高精度浮點數運算
- 避免 double 浮點誤差
double a = 0.1 + 0.2;
System.out.println(a); // 0.30000000000000004BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
BigDecimal bSum = b1.add(b2);
System.out.println(bSum); // 0.3
注意點:
- 構造 BigDecimal 時盡量使用
String
構造,而不是 double - double 構造可能引入浮點誤差
7?? 總結
本文主要講解了 Java 基本類型與包裝類、String 與 StringBuilder/StringBuffer、Math 類方法以及 高精度計算類 BigInteger/BigDecimal 的核心知識:
- 基本類型性能高,包裝類功能豐富
- 自動裝箱拆箱要注意性能和
==
問題 - 字符串拼接推薦使用 StringBuilder
- BigDecimal 是處理浮點數精度問題的利器
掌握這些基礎 API,是寫出 健壯、高性能 Java 程序的前提。