四種判斷方式
| 方法 | 代碼 | 優點 | 缺點 |
| 1. equals("") | s == null || s.equals("") | 直觀 | 效率最低(方法調用開銷) |
| 2. length() == 0 | s == null || s.length() == 0 | 效率高,直接訪問字段 | 需額外 null 判斷 |
| 3. isEmpty() (Java 6+) | s == null || s.isEmpty() | 語義清晰,效率同 length() | Java 6 以下不可用 |
| 4. == "" | s == null || s == "" | 極快(引用比較) | 僅對字面量/常量池字符串有效,new String("") 會失效 |
性能測試結果(1000 萬次循環)
- 方法 1:140 ms
- 方法 2:47 ms
- 方法 3:47 ms
- 方法 4:47 ms
最佳實踐建議
- 推薦方法 2:
s == null || s.length() == 0,兼容所有版本、效率高、語義明確。
- Java 6+ 環境可用方法 3
isEmpty(),可讀性更好。
- 避免方法 4:
== "" 僅比較引用,極易產生 Bug。
- 永遠將
null 判斷放在前面,利用短路特性避免 NullPointerException。
錯誤示例
String str = null;
if (str.equals("") || str == null) { // 拋出 NPE
...
}
// 正確寫法
if (str == null || str.isEmpty()) { ... }
// 或使用常量在前
if ("".equals(str)) { ... } // 安全,不拋 NPE