錯誤程式碼
String number1 = String.valueOf(number);
String number2 = new StringBuffer(number1).reverse().toString();
boolean answer = (number1 == number2); // 錯誤:比較參考位址
核心規則
| 運算子 | 比較內容 | 適用場景 |
== | 記憶體位址(參考) | 檢查是否為同一物件實例 |
.equals() | 字串內容(字元序列) | 檢查字串值是否相等 |
字串常量池特性
String a = "hello"; // 常量池
String b = "hello"; // 同一池物件
a == b; // true
String c = new String("hello"); // 堆中新物件
String d = new String("hello"); // 堆中另一新物件
c == d; // false
c.equals(d); // true
正確回文判斷寫法
String original = String.valueOf(number);
String reversed = new StringBuilder(original).reverse().toString();
boolean isPalindrome = original.equals(reversed); // 使用 equals
進階:Objects.equals (Java 7+)
import java.util.Objects;
boolean isPalindrome = Objects.equals(original, reversed); // 安全處理 null
常見陷阱
StringBuilder.reverse() 回傳 StringBuilder,需 .toString() 轉為 String。
- 不要用
== 比較 new String(...)、substring()、toString() 等產生的新物件。
- 效能考量:
equals 會先檢查 this == obj,同參考時極快。