String str = "X = " + e.getX() + " Y = " + e.getY();
// e.getX() 返回 int,但參與字符串拼接,編譯不報錯,為什麼?
Java 定義了字符串連接運算符 + 的特殊規則(JLS 15.18.1):
+ 任一操作數為 String,另一操作數將**自動轉換為字符串**。int 等)調用對應包裝類的 toString()(如 Integer.toString(int))。toString()(null 變為 "null")。StringBuilder.append() 鏈式調用。new StringBuilder()
.append("X = ")
.append(e.getX()) // int 自動裝箱並 append
.append(" Y = ")
.append(e.getY())
.toString()
這是語言層面的語法糖,而非類型轉換錯誤。 設計初衷是方便日誌、調試輸出。只要對象有 toString()(所有類繼承自 Object),拼接永遠合法。
logger.info("X = {}, Y = {}", x, y) 避免不必要的字符串構建開銷。StringBuilder。