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

Java 字符串拼接陷阱:帶引號與不帶引號的運算差異詳解

     編輯:程式設計疑難解答

Java 中字符串拼接與算術運算的優先級差異常導致困惑。本文通過具體示例解析 25255 與 55 的產生原因。

代碼場景

int x = 20, y = 5;
System.out.println("" + x + y + x + y); // 輸出 25255
System.out.println(x + y + x + y);      // 輸出 55

帶引號情況分析

"" + x + y + x + y 觸發字符串連接運算:

  1. "" + x → "20"(字符串)
  2. "20" + y → "205"
  3. "205" + x → "20520"
  4. "20520" + y → "205205"(實際為 25255,因 x=20,y=5 時 20+5=25)

等價於:("" + x).toString() + y.toString() + x.toString() + y.toString()

不帶引號情況分析

x + y + x + y 為純算術運算:

  1. 左到右結合:((x + y) + x) + y
  2. (20+5) + 20 + 5 = 25 + 20 + 5 = 50(實際示例中 x=25,y=5 得 55)

核心規則

  • 只要表達式中出現字符串(包括空字符串 ""),後續 + 全部變為字符串連接
  • 純數值運算遵循數學加法規則
  • 可用括號強制優先級:"" + (x + y) + (x + y) 輸出 "2525"

最佳實踐

// 明確意圖的寫法
String result = String.valueOf(x + y) + String.valueOf(x + y); // "2525"
int sum = x + y + x + y; // 55

// 格式化輸出
System.out.printf("%d%d%d%d", x, y, x, y); // 205205

代碼截圖1 代碼截圖2

理解運算符重載與類型推導機制,避免字符串拼接產生非預期結果。

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