- 1 1. Giới thiệu
- 2 2. Phương thức toString của Java là gì?
- 3 3. Sử Dụng Cơ Bản và Các Ví Dụ Đầu Ra
- 4 4. How to Override the toString Method
- 5 5. Practical Examples: Using toString in Custom Classes
- 6 6. Common Issues and Troubleshooting (Q&A Format)
- 7 7. Sự khác nhau giữa toString và valueOf, và Cách sử dụng chúng một cách đúng đắn
- 8 8. Các mẫu sử dụng thực tế của toString
- 9 9. Thông tin phiên bản và nâng cao
- 10 10. Tóm tắt và Các chủ đề liên quan được khuyến nghị
- 11 11. Câu hỏi thường gặp (FAQ)
- 12 12. Sơ Đồ và Bảng So Sánh
1. Giới thiệu
Khi phát triển bằng Java, bạn thường sẽ gặp phải phương thức “toString”. Nó đóng vai trò quan trọng đặc biệt khi bạn muốn nhanh chóng kiểm tra trạng thái hoặc nội dung của một đối tượng, hoặc khi gỡ lỗi và tạo đầu ra log. Tuy nhiên, nhiều lập trình viên mới bắt đầu và thậm chí là trung cấp có thể tự hỏi, “toString thực sự làm gì?”, “Tại sao nên ghi đè nó?”, hoặc “Nó khác gì với các phương thức chuyển đổi khác?”
Trong bài viết này, chúng tôi sẽ giải thích chi tiết về phương thức toString của Java—từ các khái niệm cơ bản đến sử dụng thực tế, kỹ thuật khắc phục sự cố, sự khác biệt với valueOf, và các trường hợp sử dụng thực tế. Chúng tôi cũng giới thiệu các lỗi phổ biến và giải pháp của chúng, cung cấp cho bạn kiến thức cần thiết để tránh các vấn đề trong các tình huống phát triển thực tế.
Nếu bạn từng gặp phải các câu hỏi như, “Một chuỗi lạ được in ra khi tôi hiển thị một đối tượng,” hoặc “toString được gọi chính xác khi nào?”, hướng dẫn này sẽ giúp ích. Dù bạn là người mới bắt đầu hay ai đó nhắm đến việc làm chủ Java ở mức độ sâu hơn, bạn sẽ tìm thấy các ví dụ hữu ích và những insight thực tế.
2. Phương thức toString của Java là gì?
Phương thức toString trong Java là một phương thức chuẩn được định nghĩa trong lớp Object, lớp cha của tất cả các lớp. Nó được sử dụng để biểu diễn thông tin mà một instance giữ dưới dạng “chuỗi”, hoạt động như một danh thiếp cho các đối tượng trong Java.
Phương thức toString chủ yếu được sử dụng trong các tình huống sau:
- Khi bạn muốn hiển thị một đối tượng dưới dạng chuỗi
- Khi bạn muốn nhanh chóng kiểm tra nội dung của một đối tượng trong quá trình gỡ lỗi hoặc đầu ra log
Cách Hoạt Động Của Triển Khai Mặc Định
Khi bạn tạo một lớp mới trong Java và không viết phương thức toString của riêng mình, triển khai mặc định từ lớp Object sẽ được sử dụng.
Triển khai này trả về một chuỗi được định dạng như sau:
ClassName@HashCode (in hexadecimal)
Ví dụ, hãy xem xét lớp sau:
public class Product {
private String name;
private int price;
}
Nếu bạn tạo một instance của lớp này và in nó bằng System.out.println, bạn sẽ thấy cái gì đó như:
Product@7a81197d
Định dạng “ClassName@HashCode” này có thể hữu ích để phân biệt các đối tượng nội bộ, nhưng nó cung cấp hầu như không có thông tin hữu ích cho con người cố gắng hiểu nội dung đối tượng.
Khi Nào toString Được Gọi Tự Động
Phương thức toString được gọi tự động trong các tình huống sau mà không cần gọi nó một cách rõ ràng:
- Khi in một đối tượng trực tiếp bằng System.out.println(object)
- Khi nối một chuỗi và một đối tượng bằng toán tử + (ví dụ,
"Value: " + obj)
Vì Java thường xử lý các đối tượng như những thứ “có thể được biểu diễn bởi toString”, việc hiểu và sử dụng đúng phương thức này là thiết yếu.
3. Sử Dụng Cơ Bản và Các Ví Dụ Đầu Ra
Phương thức toString được sử dụng trong nhiều tình huống khác nhau trong Java. Trong phần này, chúng tôi giải thích cách toString hoạt động trong các lớp chuẩn và điều gì xảy ra khi nó không được ghi đè trong các lớp tùy chỉnh—cùng với các ví dụ thực tế.
toString trong Các Lớp Wrapper Nguyên Thủy
Java cung cấp các lớp wrapper chuẩn cho các kiểu nguyên thủy như int và double (ví dụ, Integer, Double). Các lớp này đã ghi đè phương thức toString một cách có ý nghĩa.
Ví dụ:
Integer num = 123;
System.out.println(num.toString()); // Output: 123
Double pi = 3.14;
System.out.println(pi.toString()); // Output: 3.14
Bằng cách này, các lớp wrapper nguyên thủy cho phép bạn lấy giá trị của chúng trực tiếp dưới dạng chuỗi bằng toString.
toString trong Các Lớp Tùy Chỉnh (Không Ghi Đè)
Khi bạn tạo lớp của riêng mình, triển khai toString mặc định (ClassName@HashCode) sẽ được sử dụng trừ khi bạn ghi đè nó.
public class Product {
private String name;
private int price;
public Product(String name, int price) {
this.name = name;
this.price = price;
}
}
Product p = new Product("りんご", 150);
System.out.println(p.toString()); // Example: Product@4e25154f
This output only shows the class name and a hexadecimal hash code. It does not include any internal values, making it impractical in most real-world situations.
Behavior When Using System.out.println
When using System.out.println(object), toString() is automatically called internally.
Therefore, the two lines below produce the same output:
System.out.println(p); // toString is automatically called
System.out.println(p.toString()); // Explicit call
Implicit toString Call During String Concatenation
When concatenating a string and an object using the “+” operator, Java automatically calls toString.
System.out.println("Product info: " + p);
// Output example: "Product info: Product@4e25154f"
Understanding this behavior helps identify the cause of unexpected string output during debugging or logging.
4. How to Override the toString Method
When working with custom classes in Java, overriding the toString method is extremely important. By overriding it, you can output object information in a clear, human-readable format, making debugging and development far more efficient.
Why Is Overriding Necessary?
As explained earlier, the default toString implementation only displays “ClassName@HashCode,” which does not reveal the contents of the object.
In real development environments, you often need to quickly understand the state of an object, and checking each field manually is inefficient.
By overriding toString, you can output key field values at a glance, improving readability and workflow efficiency.
Additionally, detailed information can be automatically included in logs or error messages, helping with faster troubleshooting.
Basic Syntax and Implementation Tips
The basic structure of an overridden toString method is as follows:
@Override
public String toString() {
return "ClassName{field1=" + field1 + ", field2=" + field2 + "}";
}
Tips:
- The return type must be String.
- Use the @Override annotation to prevent mistakes.
- Only output important fields (avoid sensitive, private, or excessively large data).
Comparison Table: Default vs. Overridden Output Examples
| Output Example | Description |
|---|---|
| Product@7a81197d | Default implementation |
| Product{name=りんご, price=150} | Example of an overridden implementation |
Implementation Example
Below is an example using the same Product class from the previous section:
public class Product {
private String name;
private int price;
public Product(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Product{name=" + name + ", price=" + price + "}";
}
}
With this override, the output from System.out.println(p) becomes:
Product{name=りんご, price=150}
This is significantly more understandable than the default output.
Summary
Overriding the toString method is an essential technique in Java development.
It enables you to output object information in a clear and readable format, making daily development and debugging far more efficient.
5. Practical Examples: Using toString in Custom Classes
To understand how overriding the toString method can be useful in practice, this section presents concrete examples using custom classes. We also highlight common pitfalls and techniques that beginners often struggle with.
Example of Overriding toString Including Fields
Consider a Product class used to manage product information.
If you do not override toString, the output will simply be “Product@HashCode”.
However, implementing toString as shown below makes the content immediately clear.
public class Product {
private String name;
private int price;
private String category;
public Product(String name, int price, String category) {
this.name = name;
this.price = price;
this.category = category;
}
@Override
public String toString() {
return "Product{name=" + name + ", price=" + price + ", category=" + category + "}";
}
}
When you output an instance of this class:
Product apple = new Product("りんご", 150, "果物");
System.out.println(apple);
// Ví dụ đầu ra: Product{name=りんご, price=150, category=果物}
Practical Tips for Real-World Use
- During Debugging Overriding toString allows you to check each field’s value directly with System.out.println or log output.
- Displaying Arrays or Lists If you output an array or List of Product objects, the overridden toString method will be used for each element, making bulk inspection far easier.
List<Product> products = Arrays.asList( new Product("みかん", 100, "果物"), new Product("バナナ", 120, "果物") ); System.out.println(products); // Ví dụ đầu ra: [Product{name=みかん, price=100, category=果物}, Product{name=バナナ, price=120, category=果物}]
- Integration with IDE Debuggers Many IDEs (Eclipse, IntelliJ, etc.) use the toString output when showing object details at breakpoints. Writing a clean and readable toString greatly improves debugging efficiency.
Common Pitfalls Beginners Should Watch For
- There is no need to display all fields. Exclude sensitive or private data when necessary.
- Be careful of circular references when calling another object’s toString inside your own (e.g., A → B → A).
Summary
By overriding toString, you dramatically improve visibility during development, debugging, and even troubleshooting in production environments.
Use these sample implementations as a reference and apply them proactively in your custom classes.
6. Common Issues and Troubleshooting (Q&A Format)
While the toString method is convenient, incorrect implementation or usage can lead to unexpected problems.
This section summarizes frequently encountered errors and questions in a Q&A format, along with their causes and solutions.
Q1. What happens if I forget to override toString?
A1.
If you forget to override it, System.out.println or log output will show only “ClassName@HashCode,” which makes it impossible to understand the object’s internal state.
For complex classes or objects stored in arrays and lists, this often makes it difficult to distinguish one item from another.
To maintain development and debugging efficiency, always override toString when needed.
Q2. What happens if I call toString on null?
A2.
Calling toString on null throws a NullPointerException.
Example:
Product p = null;
System.out.println(p.toString()); // NullPointerException
Always check for null when it is possible:
if (p != null) {
System.out.println(p);
} else {
System.out.println("Sản phẩm là null");
}
Q3. What if toString causes recursive calls and results in StackOverflowError?
A3.
If toString in one class calls another toString that eventually calls back into the original class, you will trigger infinite recursion, leading to a StackOverflowError.
This is common in parent–child or bidirectional references.
Possible Solutions:
- Limit output to one side of the relationship
- Output only summaries (e.g., IDs or key fields)
Q4. Why is toString called automatically during string concatenation?
A4.
When concatenating a string and an object using the “+” operator, Java automatically calls toString.
If the default toString is used, unexpected and unreadable strings may appear.
This is another reason why overriding toString is recommended.
Q5. What should I be careful about regarding security when implementing toString?
A5.
Never include passwords, personal information, private keys, or other sensitive data in the toString output.
Since logs or error messages may be exposed externally, include only the information that is safe and necessary.
Summary
Minor mistakes in toString can significantly reduce debugging efficiency or cause unexpected errors.
Keep the following points in mind:
- Đừng quên ghi đè toString khi cần
- Luôn kiểm tra null trước khi gọi toString
- Tránh các tham chiếu vòng và đầu ra quá mức
By being aware of these common issues, Java development becomes much smoother and more reliable.
7. Sự khác nhau giữa toString và valueOf, và Cách sử dụng chúng một cách đúng đắn
When learning Java, you will also encounter another method with a similar name: “valueOf.”
Because both methods are used to convert objects or values into strings, it’s easy to confuse them.
However, their roles and appropriate use cases are different.
This section compares both methods and explains how to choose the correct one.
So sánh: toString vs. valueOf
| toString() | valueOf() | |
|---|---|---|
| Defined In | Instance method of the Object class | Usually a static method of the String class |
| How to Call | obj.toString() | String.valueOf(obj) |
| Return Value | A string that represents the content of the object | A string created by converting the argument to type String |
| Behavior When Argument Is null | Throws NullPointerException | Returns the string “null” |
| Main Use Cases | Displaying object contents; debugging | Safely converting any value (including null) to a string |
Khi nào nên dùng toString
- Khi bạn muốn hiển thị trạng thái của đối tượng dưới dạng dễ đọc cho con người
- Khi kiểm tra nội dung đối tượng trong quá trình gỡ lỗi hoặc ghi log
- Khi tùy chỉnh đầu ra cho lớp của riêng bạn (bằng cách ghi đè)
Khi nào nên dùng valueOf
- Khi bạn muốn chuyển bất kỳ giá trị hoặc đối tượng nào thành String
- Khi bạn muốn tránh ngoại lệ ngay cả khi giá trị có thể là null
- Khi chuẩn bị giá trị để hiển thị hoặc ghi log, nơi yêu cầu an toàn với null
Object obj = null; System.out.println(String.valueOf(obj)); // Output: "null" System.out.println(obj.toString()); // NullPointerException
Các trường hợp sử dụng thực tế
- Sử dụng toString khi bạn muốn thông tin rõ ràng, tùy chỉnh từ một lớp
- Sử dụng String.valueOf khi chuyển bất kỳ thứ gì thành chuỗi một cách an toàn, bao gồm cả null
Lưu ý bổ sung
Đối với các kiểu nguyên thủy, cả toString và valueOf đều trả về kết quả tương tự.
Tuy nhiên, khi có khả năng đối số có thể là null, String.valueOf là lựa chọn an toàn hơn.
8. Các mẫu sử dụng thực tế của toString
By properly implementing the toString method, you can gain many advantages in day-to-day development and system operation.
This section introduces common real-world use cases and best practices for team development.
Gỡ lỗi và xuất log
The toString method is extremely valuable when debugging or generating logs during development and production operations.
For example, when an exception occurs or when you want to track execution flow, printing object details using toString makes root-cause analysis much faster.
Product p = new Product("バナナ", 120, "果物");
System.out.println(p); // Product{name=バナナ, price=120, category=果物}
When combined with logging frameworks such as Log4j or SLF4J, an overridden toString produces much clearer log messages.

Lưu tệp và tích hợp hệ thống bên ngoài
When saving data to text files or sending information to other systems through APIs, you can convert object data into strings using toString.
The toString output can also serve as a foundation when generating CSV or JSON representations.
Sử dụng trong giao diện người dùng (Hiển thị màn hình)
In Java GUI frameworks such as Swing or JavaFX, the toString method is used frequently when displaying objects in lists or tables.
The return value of toString often becomes the direct representation shown in list items or table cells.
DefaultListModel<Product> model = new DefaultListModel<>();
model.addElement(new Product("みかん", 100, "果物"));
// When the model is set to a JList or JTable, the toString output is used as the display text.
Các thực hành tốt nhất cho phát triển nhóm
- Thiết lập quy tắc định dạng thống nhất cho toString trong toàn đội. Điều này cải thiện khả năng đọc và tính nhất quán của log và đầu ra gỡ lỗi.
- Đặt hướng dẫn như tóm tắt các cấu trúc dữ liệu lớn và loại bỏ thông tin nhạy cảm.
When used effectively, the toString method significantly enhances development speed and code maintainability.
9. Thông tin phiên bản và nâng cao
Phương thức toString đã là một phần của Java từ những phiên bản đầu tiên, và hành vi cốt lõi của nó không thay đổi đáng kể qua các bản phát hành.
Tuy nhiên, các cải tiến trong tính năng ngôn ngữ và phong cách mã hóa đã ảnh hưởng đến cách các nhà phát triển triển khai và sử dụng toString.
Phần này bao gồm các ghi chú liên quan đến phiên bản và các ví dụ ứng dụng hiện đại.
Sự khác biệt qua các phiên bản Java
- Hành vi cốt lõi của toString vẫn nhất quán Kể từ Java 1.0, phương thức toString của lớp Object đã tuân theo định dạng giống nhau: “ClassName@HashCode.” Việc ghi đè và sử dụng toString về cơ bản là giống nhau qua tất cả các phiên bản Java.
- Ghi chú chính
- Hành vi của toString bản thân không thay đổi với các cập nhật phiên bản Java.
- Một số thư viện và framework bên thứ ba đã giới thiệu các tính năng để tùy chỉnh đầu ra toString (ví dụ: chú thích @ToString của Lombok).
Phong cách mã hóa hiện đại và các ví dụ ứng dụng
- Lớp Record (Java 16 trở lên) Với sự giới thiệu của records trong Java 16, các bộ chứa dữ liệu đơn giản tự động tạo ra một triển khai toString có thể đọc được.
public record Book(String title, int price) {} Book book = new Book("Java入門", 2500); System.out.println(book); // Book[title=Java入門, price=2500]
- Triển khai tự động với Lombok Lombok cho phép tạo tự động đầu ra toString chỉ bằng cách thêm chú thích @ToString. Điều này đặc biệt hữu ích trong các dự án lớn nơi triển khai thủ công trở nên tốn thời gian.
import lombok.ToString; @ToString public class Item { private String name; private int price; }
Tóm tắt
Mặc dù hành vi cơ bản của toString nhất quán qua các phiên bản Java, các tính năng và thư viện hiện đại giúp các nhà phát triển triển khai nó hiệu quả và an toàn hơn.
Chọn phong cách triển khai phù hợp dựa trên yêu cầu dự án và hướng dẫn mã hóa của đội ngũ.
10. Tóm tắt và Các chủ đề liên quan được khuyến nghị
Phương thức toString là một kỹ thuật cơ bản trong lập trình Java, được sử dụng để biểu diễn nội dung đối tượng dưới dạng định dạng có thể đọc được bởi con người.
Vì triển khai mặc định không cung cấp đủ thông tin hữu ích, việc ghi đè nó—khi phù hợp—đáng kể nâng cao cả hiệu quả phát triển và năng suất gỡ lỗi.
Bài viết này đã bao gồm cấu trúc của toString, cách triển khai nó, các lỗi phổ biến và mẹo khắc phục sự cố, cũng như sự khác biệt giữa toString và valueOf và các mẫu sử dụng thực tế.
Với mã mẫu và hướng dẫn được bao gồm, ngay cả người mới bắt đầu cũng có thể tự tin triển khai các phương thức toString hiệu quả.
Những điểm chính cần ghi nhớ
- toString xuất phát từ lớp Object và được sử dụng để hiển thị thông tin đối tượng theo cách có thể đọc được bởi con người.
- Triển khai mặc định không thực tế; các lớp tùy chỉnh nên ghi đè nó để rõ ràng.
- Xử lý các giá trị null, tham chiếu vòng tròn, và dữ liệu nhạy cảm cẩn thận khi triển khai.
- Hiểu cách phân biệt giữa toString và valueOf cho phép mã hóa linh hoạt và mạnh mẽ hơn.
Các chủ đề liên quan được khuyến nghị
- Các thực hành tốt nhất để sử dụng equals và hashCode trong Java
- Xử lý chuỗi hiệu quả với StringBuilder và StringBuffer
- Các kỹ thuật gỡ lỗi thực tế sử dụng công cụ IDE (Eclipse, IntelliJ, v.v.)
- Xử lý lỗi trong Java (try-catch-finally) và các lỗi phổ biến
- Sử dụng các thư viện hữu ích như Lombok để giảm mã boilerplate
Để làm sâu sắc thêm sự hiểu biết của bạn, hãy khám phá các chủ đề trên.
Bạn sẽ tìm thấy các gợi ý hữu ích giúp làm cho phát triển Java của bạn hiệu quả, sạch sẽ và năng suất hơn.
11. Câu hỏi thường gặp (FAQ)
Phần này trả lời các câu hỏi phổ biến về phương thức toString của Java—nhiều trong số đó cũng xuất hiện thường xuyên trong các gợi ý tìm kiếm.
Sử dụng tài liệu tham khảo này bất cứ khi nào bạn không chắc chắn hoặc gặp phải vấn đề liên quan.
Q1. Tôi có luôn phải ghi đè toString không?
A1.
Không bắt buộc, nhưng đối với các lớp tùy chỉnh mà bạn cần kiểm tra nội dung đối tượng hoặc gỡ lỗi hành vi, việc ghi đè là rất nên làm.
Cài đặt mặc định chỉ hiển thị “ClassName@HashCode,” điều này cung cấp ít giá trị thực tế.
Q2. Sự khác biệt giữa valueOf và toString là gì?
A2.
toString là một phương thức instance trả về một chuỗi đại diện cho nội dung của đối tượng.
valueOf thường là một phương thức static trong lớp String chuyển bất kỳ giá trị hoặc đối tượng nào thành String.
Sự khác biệt chính nằm ở cách xử lý null:
- toString → ném NullPointerException
- valueOf → trả về chuỗi nguyên “null”
Q3. Tôi nên bao gồm thông tin gì trong toString?
A3.
Bao gồm các đặc điểm hoặc trường chính giúp phân biệt đối tượng đó.
Tránh in mật khẩu, dữ liệu cá nhân hoặc các thông tin nhạy cảm khác.
Q4. Khi triển khai toString, tôi cần chú ý gì?
A4.
- Kiểm tra giá trị null khi cần thiết
- Cẩn thận với việc đệ quy vô hạn do các tham chiếu vòng
- Tóm tắt dữ liệu lớn hoặc phức tạp thay vì in toàn bộ
- Đề phòng các vấn đề bảo mật và quyền riêng tư
Q5. Có an toàn khi công khai đầu ra của toString đã ghi đè ra bên ngoài không?
A5.
Phụ thuộc vào nội dung.
Log và báo cáo lỗi có thể được truy cập bên ngoài hệ thống của bạn, vì vậy không bao giờ đưa thông tin nhạy cảm hoặc bí mật vào đầu ra của toString.
Q6. Tôi nên triển khai toString cho các lớp đệ quy hoặc có cấu trúc phân cấp như thế nào?
A6.
Các cấu trúc vòng—như quan hệ cha‑con hoặc liên kết hai chiều—có thể gây đệ quy vô hạn và dẫn đến StackOverflowError.
Các giải pháp hiệu quả bao gồm:
- Chỉ xuất ID hoặc các trường thiết yếu
- Giới hạn độ sâu đệ quy
- Đại diện cho các đối tượng lồng nhau bằng các placeholder (ví dụ: “[…]”)
Q7. Tôi có thể kiểm tra đầu ra của toString trong các IDE debugger không?
A7.
Có. Hầu hết các IDE (Eclipse, IntelliJ, v.v.) tự động hiển thị kết quả toString khi kiểm tra đối tượng trong quá trình gỡ lỗi.
Việc tùy chỉnh toString cải thiện đáng kể hiệu quả gỡ lỗi.
Phương thức toString có thể trông đơn giản, nhưng việc sử dụng đúng cách sẽ nâng cao năng suất và chất lượng mã trong phát triển Java.
Hãy quay lại FAQ này bất cứ khi nào bạn cần sự rõ ràng hoặc lời nhắc nhanh.
12. Sơ Đồ và Bảng So Sánh
Hiểu sự khác nhau giữa các phương thức toString và valueOf, cũng như sự tương phản giữa đầu ra đã ghi đè và chưa ghi đè, có thể khó nắm bắt chỉ qua văn bản.
Phần này tóm tắt các điểm chính bằng sơ đồ và bảng so sánh để giúp bạn nắm bắt khái niệm một cách trực quan.
[1] So sánh: toString vs. valueOf
| Item | toString() (Instance Method) | String.valueOf() (Static Method) |
|---|---|---|
| Defined In | Object class | String class |
| How to Call | obj.toString() | String.valueOf(obj) |
| Handling of null | Throws NullPointerException | Returns the string “null” |
| Overriding | Recommended for custom classes | Not necessary (works with any type) |
| Main Usage | Displaying object contents; debugging | Safe and universal conversion to String |
| Customizability | High (fully customizable) | Low (fixed standard behavior) |
[2] Sự khác biệt về đầu ra Trước và Sau khi Ghi đè toString (Sơ Đồ)
[Before Override]
Product@3e3abc88
↑
(Only displays ClassName@HashCode)
[After Override]
Product{name=りんご, price=150, category=果物}
↑
(Displays meaningful field information!)
[3] Tự động Gọi toString (Minh Họa Khái Niệm)
Product p = new Product("りんご", 150, "果物");
System.out.println(p);
// ↑ Automatically calls p.toString()
String text = "Product: " + p;
// ↑ Also automatically calls p.toString()
[4] Ví dụ về toString trong Cấu trúc Đệ quy
class Node {
Node child;
@Override
public String toString() {
// Calling child.toString() directly may cause infinite recursion
return "Node{" + "child=" + (child != null ? "[...]" : "null") + "}";
}
}
*Đối với các cấu trúc lớp đệ quy, việc tránh các tham chiếu vòng và vòng lặp vô hạn là rất quan trọng.
Bộ sưu tập các sơ đồ và bảng này giúp hình dung cách hoạt động của phương thức toString, lợi ích của nó, và những điểm cần chú ý đặc biệt.
Hãy sử dụng các tài liệu hình ảnh này để thiết kế các ứng dụng Java rõ ràng, dễ bảo trì hơn.


