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

Java 基礎:Cookie 構造中 `+ ""` 將 long 轉 String 的原理

     編輯:程式設計綜合問答

代碼片段

Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");

疑問:為什麼要在 System.currentTimeMillis() 後拼接空字符串 + ""?

核心原因:類型匹配

  • System.currentTimeMillis() 返回 long 類型(毫秒級時間戳)。
  • Cookie(String name, String value) 構造器要求 value 參數為 String 類型。
  • Java 中 字符串拼接運算符 `+` 具有隱式類型轉換能力:當一邊是 String,另一邊為基本類型或對象時,會自動調用 String.valueOf() 將其轉為字符串。

等價寫法對比

寫法原理推薦程度
time + ""字符串拼接觸發隱式轉換⭐⭐⭐ 簡潔、慣用
String.valueOf(time)顯式調用標準庫方法⭐⭐⭐⭐⭐ 最清晰、性能最優
Long.toString(time)Long 包裝類靜態方法⭐⭐⭐⭐ 專用於 long,語義明確
"" + time同 `time + ""`,順序不同⭐⭐ 可讀性稍差

字節碼層面解析

time + "" 編譯後實際調用 StringBuilder.append(long).toString()(Java 9+ 優化為 StringConcatFactory),本質上仍是創建中間對象。String.valueOf() 直接調用 Long.toString(),避免了 StringBuilder 開銷,極微量更高效。

最佳實踐建議

  1. 業務代碼首選 String.valueOf():語義明確、無歧義、性能最優。
  2. 日誌/調試輸出可用 `+ ""`:寫法快、可讀性可接受。
  3. 避免使用 `new Long(time).toString()`:創建不必要的包裝對象,增加 GC 壓力。

延伸:Cookie 存儲時間戳的更好方式

// 設置
cookie.setValue(String.valueOf(System.currentTimeMillis()));

// 讀取
long lastTime = Long.parseLong(cookie.getValue());

掌握基本類型與字符串互轉的多種方式,能寫出更專業、高效的 Java 代碼。

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