在 Java 程式設計中,java.lang 套件下的常用類是開發者每天都會打交道的基石。本文系統梳理了基本類型包裝類、字符串處理(String、StringBuilder、StringBuffer)以及日期時間處理(Date、SimpleDateFormat、Calendar)的核心概念、常見陷阱與最佳實踐,助你夯實 Java 基礎。
Java 不是純面向對象語言,八大基本類型(int、double、boolean 等)不具備對象特性,無法直接存入集合或調用對象方法。為此,Java 為每種基本類型提供了對應的包裝類:
Integer ⇄ intDouble ⇄ doubleBoolean ⇄ booleanCharacter ⇄ charByte、Short、Long、FloatJDK 5.0 引入編譯器語法糖,讓基本類型與包裝類互轉更簡潔:
// 自動裝箱:int → Integer
Integer i = 100; // 編譯器轉為 Integer.valueOf(100)
// 自動拆箱:Integer → int
int a = new Integer(100); // 編譯器轉為 new Integer(100).intValue()
注意:頻繁裝箱/拆箱會產生大量臨時對象,影響性能;在熱點循環中建議直接使用基本類型。
final char[] value,創建後不可修改s1 + s2 實際產生新對象,循環拼接會導致大量臨時對象,效率極低| 類別 | 線程安全 | 效率 | 適用場景 |
|---|---|---|---|
| StringBuilder | 否 | 高 | 單線程、大量拼接 |
| StringBuffer | 是 | 低 | 多線程共享緩衝區 |
最佳實踐:單線程環境優先用 StringBuilder,多線程才用 StringBuffer;避免在循環中直接用 + 拼接 String。
long 型毫秒數(自 1970-01-01 00:00:00 UTC)yyyy-MM-dd HH:mm:ss)// 格式化 Date → String
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str = sdf.format(new Date());
// 解析 String → Date
String input = "2024-06-15 14:30:00";
Date date = sdf.parse(input); // 需捕獲 ParseException
避坑指南:SimpleDateFormat 非線程安全,多線程環境下請使用 ThreadLocal 或 JDK 8+ 的 java.time.format.DateTimeFormatter(不可變、線程安全)。
public class DateFormatDemo {
public static void main(String[] args) throws ParseException {
Date now = new Date();
// 默認格式
System.out.println(DateFormat.getDateInstance().format(now));
// 自定義複雜格式
SimpleDateFormat sdf = new SimpleDateFormat(
"\n★====^_^======★\nyyyy年MM月dd日\n★====^_^======★\n");
System.out.println(sdf.format(now));
// 解析帶前綴字符串
String str = "===>>>2016年3月6號北京時間:15點23分21秒<<<===";
SimpleDateFormat parser = new SimpleDateFormat(
"===>>>yyyy年MM月dd號北京時間:HH點mm分ss秒<<<===");
System.out.println(parser.parse(str));
}
}
+,大量拼接用 StringBuilder,多線程用 StringBufferjava.time 包(LocalDateTime、DateTimeFormatter),舊項目維護時注意 SimpleDateFormat 線程安全問題