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

Java charAt(0) 比較失效:字元 '1' ≠ 數值 1 (ASCII 49)

     編輯:程式設計疑難解答

錯誤代碼

String aa = "11111";
if (aa.charAt(0) != 1) {  // 錯誤:比較 char 與 int 數值 1
    System.out.println("第一個數不為 1");
}

輸出:「第一個數不為 1」——**即使輸入以 '1' 開頭也會進入 if**。

根因

  • aa.charAt(0) 回傳 char 型別,值為 '1',其 **Unicode/ASCII 碼為 49 (0x31)**。
  • 1 是 int 數值常量,值為 1。
  • Java 自動將 char 提升為 int 進行比較:**49 != 1 為真**,故進入 if 區塊。

正確寫法(三種)

  1. 字元字面量比較(推薦,語意最清晰):
    if (aa.charAt(0) != '1') { ... }
    
  2. 數值比較(需知 ASCII 碼):
    if (aa.charAt(0) != 49) { ... }  // '1' == 49
    
  3. 字串比較(避開 char 陷阱):
    if (!aa.startsWith("1")) { ... }
    // 或
    if (!"1".equals(aa.substring(0, 1))) { ... }
    

字元與數值對照表(常用)

字元ASCII/Unicode 十進位十六進位
'0'480x30
'1'490x31
'9'570x39
'A'650x41
'a'970x61
'\n'100x0A
'\t'90x09
' '320x20

避坑原則

「字元字面量用單引號 'x',字串用雙引號 \"x\",數值直接寫數字。比較字元內容永遠用 'x',別用數值。」

  • char c = '1'; ✅
  • char c = 49; ⚠️ 可讀性差,維護時易誤改。
  • if (c == 1) ❌ 錯誤,應 if (c == '1')。
  • if (c == "1") ❌ 編譯錯誤:char 不能與 String 比較。

總結: charAt(0) 回傳 char,比較時**必須用字元字面量 '1'**,不能用數值 1。這是 Java 新手最常見的「字元 vs 數值」混淆 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved