從 List<Map<String, Object>> 取出的 id(實為 Integer 或 Long)與 String 型別的 id 使用 equals 比較永遠回傳 false。
String.equals(Object) 只有在參數同為 String 時才比較內容;若傳入 Integer,直接回傳 false。
原始碼片段如下:
public boolean equals(Object anObject) {
if (this == anObject) return true;
if (anObject instanceof String) { // 只有 String 才進入內容比較
String anotherString = (String)anObject;
// ... 逐字元比較
return true;
}
return false; // 非 String 直接 false
}
String:map.put("id", String.valueOf(id))。String idStr = String.valueOf(map.get("id")); 再比較。Objects.equals(map.get("id"), "123") 可處理 null 且自動轉字串比較(Java 7+)。