本文收錄四個高頻易錯知識點,助力面試與代碼審查。
String path = "a.b.c";
System.out.println(path.replaceAll(".", "/")); // 輸出 "///" 而非 "a/b/c"
// 原因:'.' 在正則中匹配任意字符
// 正確寫法
System.out.println(path.replaceAll("\\.", "/")); // "a/b/c"
System.out.println(path.replace(".", "/")); // replace 不用正則,直接替換
| 特性 | AWT (Abstract Window Toolkit) | Swing |
|---|---|---|
| 實現方式 | 調用本地 native 代碼 (Peer 模型) | 純 Java 實現 (Lightweight) |
| 跨平台外觀 | 隨操作系統:Windows 風格 / Motif 風格 | 可插拔 LookAndFeel,統一外觀 |
| 組件豐富度 | 基礎組件 | 豐富組件 (JTable, JTree, JTabbedPane...) |
| 性能/資源 | 重量級,佔用較多系統資源 | 輕量級,佔用較少 |
| 混用注意 | 同一窗口避免混用重/輕組件,否則 Z-order 顯示異常 | |
Swing 核心容器 JFrame、JDialog、JWindow 本質仍是重量級 (繼承 AWT 對應類)。
Integer i1 = 59; // 自動裝箱 → Integer.valueOf(59) int i2 = 59; // 基本類型 Integer i3 = Integer.valueOf(59); // 直接調用 valueOf Integer i4 = new Integer(59); // 強制創建新對象 System.out.println(i1 == i2); // true → i1 自動拆箱為 int 比較值 System.out.println(i1 == i3); // true → 緩存 [-128, 127] 返回同一引用 System.out.println(i3 == i4); // false → i4 是新對象 System.out.println(i2 == i4); // true → i4 自動拆箱比較值
原理:Integer.valueOf(int) 先檢查 IntegerCache.cache[-128~127],命中則返回引用,否則 new Integer(i)。JVM 參數 -XX:AutoBoxCacheMax=size 可調整緩存上限。
getMethods():返回所有 public 方法,包含繼承自父類/實現的接口方法。getDeclaredMethods():返回類聲明的所有方法(public/protected/default/private),不包含繼承方法,但包含接口默認方法。public class Base { public void foo() {} protected void bar() {} }
public class Sub extends Base { private void baz() {} }
Sub.class.getMethods() // [foo] 只有 public 且可見
Sub.class.getDeclaredMethods() // [baz] 只有自身聲明