Scanner scan = new Scanner(System.in);
String str = scan.next();
if (str != "yes") // 錯誤:使用 != 比較字串內容
System.out.println(str);
輸入 `yes` 但條件成立,印出 `yes`。初學者以為 `scan.next()` 返回值包含轉義字元。
`String` 是參考型別,`==` 和 `!=` 比較的是記憶體地址(引用),而非字串內容。 字串字面量 `"yes"` 存放在常量池,而 `scan.next()` 返回的是堆上新建立的 `String` 物件,兩者引用不同,故 `str != "yes"` 為 `true`。
if (!"yes".equals(str)) // 推薦:避免空指針
// 或
if (!str.equals("yes"))