คำตอบ: ไม่ได้ Array ใน Java เป็น Object พิเศษ ไม่มี Class Definition ที่เราสามารถ Override toString() ได้ Arrays.toString() ให้ผลลัพท์แบบ [elem1, elem2, ...] แต่ไม่ใช้ toString() ของ Element
ปัญหา
Student[] students = {new Student("A"), new Student("B")};
System.out.println(students); // Output: [LStudent;@15db9742 (Hashcode)
System.out.println(students.toString()); // เหมือนกัน
วิธีแก้ 3 แบบ
1. ใช้ Arrays.toString() (แนะนำง่ายที่สุด)
import java.util.Arrays;
class Student {
String name;
Student(String name) { this.name = name; }
@Override public String toString() { return "Student: " + name; }
}
public class ArrayToString {
public static void main(String[] args) {
Student[] students = {new Student("Krishna"), new Student("Radha")};
System.out.println(Arrays.toString(students));
// เรียก toString() ของแต่ละ Element เอง
}
}
[Student: Krishna, Student: Radha]
2. ใช้ Arrays.asList()
System.out.println(Arrays.asList(students)); // Output: [Student: Krishna, Student: Radha]
3. สร้าง Wrapper Class Extends ArrayList (Advanced)
import java.util.ArrayList;
public class StudentList extends ArrayList<Student> {
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < size(); i++) {
if (i > 0) sb.append(", ");
sb.append(get(i).toString());
}
return sb.append("]").toString();
}
public static void main(String[] args) {
StudentList list = new StudentList();
list.add(new Student("Krishna"));
list.add(new Student("Radha"));
System.out.println(list); // ใช้ toString() ของ List เอง
}
}
สรุป
| วิธี | เหมาะสำหรับ | ข้อดี |
|---|---|---|
Arrays.toString(array) |
Array ทุกชนิด | Simple, Standard, ใช้ toString() ของ Element |
Arrays.asList(array) |
Array -> List View | ได้ List Features, toString() สวย |
| Custom Wrapper Class | ต้องการ Format พิเศษ | ควบคุม Format ได้เต็มที่ |
Best Practice: ใช้ Arrays.toString() หรือ Arrays.deepToString() (สำหรับ Nested Array) สำหรับการ Debug/Log ทั่วไป