int value = 10;
Cursor cursor = db.query("TABLE_X", new String[]{"COL_A", "COL_B"},
"COL_C = ?", new String[]{Integer.toString(value)}, null, null, null);
求除 Integer.toString() 外的簡潔寫法。
| 寫法 | 代碼 | 優點 | 適用場景 |
|---|---|---|---|
| 字符串拼接(最簡) | new String[]{"" + value} | 零對象創建、可讀性高 | 單參數、日常開發 |
| String.valueOf(標準庫) | new String[]{String.valueOf(value)} | null 安全、語義明確、JDK 源碼優化 | 通用工具方法、代碼規範要求 |
| StringBuilder(高性能批量) | new String[]{new StringBuilder().append(value).toString()} | 循環大量拼接避免臨時對象 | 批量構建參數數組、高頻調用 |
"" + value → 編譯器優化為 StringBuilder.append(value).toString()。String.valueOf(int) 內部調用 Integer.toString(int),**無額外開銷**。query 參數數組**必須為 String[]**,底層會按 TEXT 綁定,數據庫引擎自動按列親和性轉換(INTEGER 親和性列會自動 CAST)。public static String[] toStrArray(Object... args) {
String[] arr = new String[args.length];
for (int i = 0; i < args.length; i++) {
arr[i] = String.valueOf(args[i]);
}
return arr;
}
// 調用
cursor = db.query("TABLE_X", cols, "COL_C = ? AND COL_D = ?",
toStrArray(value1, value2), null, null, null);
**"" + value 最簡潔**,String.valueOf() 最規築。SQLite 參數綁定本質是文本化,無需擔心類型轉換性能,數據庫引擎會處理親和性轉換。