การรวมสตริงกับตัวเลขใน Java
Java ใช้ + สำหรับทั้งการบวกตัวเลขและการต่อสตริง (String Concatenation) ซึ่งทำงานจากซ้ายไปขวา
ตัวอย่างโค้ด
public class Demo {
public static void main(String[] args) {
System.out.println("เครื่องหมาย = อยู่ระหว่างค่าคำนวณสองค่า");
// คำนวณก่อน แล้วต่อสตริง
System.out.println(45 + 5 + "=" + (56 + 11));
// ใช้ข้อความแทนเครื่องหมาย
System.out.println(45 + 5 + " equals " + (56 + 11));
}
}
ผลลัพธ์
เครื่องหมาย = อยู่ระหว่างค่าคำนวณสองค่า 50=67 50 equals 67
คำอธิบายลำดับการทำงาน
45 + 5 + "=" + (56 + 11) // ขั้นตอน: 1. 45 + 5 = 50 (int + int = int) 2. 50 + "=" = "50=" (int + String = String) 3. (56 + 11) = 67 (int + int = int) - คำนวณในวงเล็บก่อน 4. "50=" + 67 = "50=67" (String + int = String)
จุดสำคัญ: Operator Precedence และ Associativity
()มี precedence สูงสุด → คำนวณก่อน+(numeric) และ+(string) มี precedence เท่ากัน → Left-to-right associativity- เมื่อเจอ String operand → ทุกอย่างต่อจากนั้นจะกลายเป็น String concatenation
ตัวอย่างคับคั่ง
System.out.println(1 + 2 + "3"); // "33" (1+2=3, "3"+"3"="33")
System.out.println("1" + 2 + 3); // "123" ("1"+"2"="12", "12"+"3"="123")
System.out.println(1 + 2 + 3); // 6 (ทั้งหมดเป็น int)
System.out.println(1 + (2 + "3")); // "123" (วงเล็บบังคับให้ 2+"3" ก่อน)
Best Practices
- ใช้
String.format()หรือStringBuilderสำหรับการต่อสตริงซับซ้อน - ใช้วงเล็บ
()คั่นการคำนวณตัวเลขให้ชัดเจน - หลีกเลี่ยงการผสม + ตัวเลขและสตริงใน statement เดียวโดยไม่มีวงเล็บ
String.format ตัวอย่าง
System.out.println(String.format("%d + %d = %d", 45+5, 56+11, 45+5+56+11));
// 50 + 67 = 117