String ใน Java ใช้เก็บลำดับตัวอักษร เป็น object ของคลาส java.lang.String สร้างได้ 2 แบบ:
String strObj = new String("Hello"); // new keyword
String strLit = "Welcome"; // string literal
วิธีการ Concatenate Strings
1. ใช้ตัวดำเนินการ + (Simple)
String str1 = "Krishna";
String str2 = "Kasyap";
String result = str1 + str2; // "KrishnaKasyap"
2. ใช้ concat() method
String result = str1.concat(str2); // "KrishnaKasyap"
3. ใช้ StringBuilder (แนะนำสำหรับ Loop/Performance)
StringBuilder sb = new StringBuilder(str1);
sb.append(str2);
String result = sb.toString();
4. ใช้ StringBuffer (Thread-safe version)
StringBuffer sb = new StringBuffer(str1);
sb.append(str2);
String result = sb.toString();
ตัวอย่างโค้ดครบถ้วน
import java.util.Scanner;
public class StringConcatenation {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter first string: ");
String str1 = sc.next();
System.out.println("Enter second string: ");
String str2 = sc.next();
// ทุกวิธีให้ผลลัพธ์เหมือนกัน
System.out.println("+ operator: " + (str1 + str2));
System.out.println("concat(): " + str1.concat(str2));
System.out.println("StringBuilder: " + new StringBuilder(str1).append(str2));
System.out.println("StringBuffer: " + new StringBuffer(str1).append(str2));
}
}
ผลลัพธ์
Enter first string: Krishna
Enter second string: Kasyap
+ operator: KrishnaKasyap
concat(): KrishnaKasyap
StringBuilder: KrishnaKasyap
StringBuffer: KrishnaKasyap
การเปรียบเทียบประสิทธิภาพ
| วิธี | Performance | Thread-Safe | ใช้เมื่อไหร่ |
|---|---|---|---|
| + operator | ดี (compiler optimize เป็น StringBuilder) | N/A | Statement เดียว, ไม่ได้อยู่ใน loop |
| concat() | พอใช้ | N/A | ต่อ 2 string เท่านั้น |
| StringBuilder | ดีที่สุด | ไม่ | Loop, หลายครั้ง, single-thread |
| StringBuffer | ดี | ใช่ | Multi-thread environment |
Best Practices
- ใน Loop: สร้าง StringBuilder นอก loop, append ใน loop, toString() หลัง loop
- หลาย String:
String.join(delimiter, str1, str2, str3)(Java 8+) - String.format(): สำหรับ template ที่ซับซ้อน
- ไม่ทำ:
s += "something"ใน loop (สร้าง object ใหม่ทุก iteration)
ตัวอย่าง Anti-pattern vs Best Practice
// ❌ Bad: สร้าง object ใหม่ทุก loop
String result = "";
for (int i = 0; i < 1000; i++) {
result += i; // ช้า มาก!
}
// ✅ Good: StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i);
}
String result = sb.toString(); // เร็วมาก