首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Scanner 輸入字串比較錯誤:== 與 equals 的區別

     編輯:程式設計疑難解答

問題代碼

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"))

補充知識

  • `String.intern()` 可將堆上字串放入常量池,但通常無需使用。
  • Java 7+ 的 `switch` 支援 `String`,內部也是用 `equals` 比較。
  • 除非確定是同一引用(如常量池字面量、同一物件),**永遠用 `equals` 比較字串內容**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved