Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Trong lập trình Java, đối tượng String là một khái niệm cơ bản và thường xuyên được sử dụng. Trong bài viết này, chúng ta sẽ cùng khám phá đối tượng String này và hiểu rõ hơn về nó.
Khởi tạo đối tượng String
Chúng ta có một số cách khác nhau để khởi tạo một đối tượng String:
- Sử dụng toán tử new:
String a = new String("Khanh");
- Sử dụng toán tử gán "=":
String b = "Khanh";
- Khai báo trong dấu nháy kép:
System.out.println("Khanh");
Sự khác nhau giữa các cách khai báo trên là:
Nếu bạn khai báo đối tượng String sử dụng toán tử new, Java sẽ tạo ra các đối tượng String riêng biệt, được lưu trữ ở các vị trí khác nhau trong bộ nhớ. Do đó, khi so sánh những đối tượng này sử dụng toán tử quan hệ "==", kết quả sẽ là false.
Ví dụ:
String a = new String("Khanh");
String b = new String("Khanh");
System.out.println(a == b);
Kết quả:
Nếu bạn khởi tạo đối tượng String bằng cách sử dụng toán tử gán "=", khi so sánh những đối tượng này sử dụng toán tử quan hệ "==", kết quả sẽ là true.
Ví dụ:
String a = "Khanh";
String b = "Khanh";
System.out.println(a == b);
Kết quả:
Nguyên nhân là do đâu?
Khi bạn khởi tạo biến String a với nội dung "Khanh" sử dụng toán tử gán "=", Java sẽ tạo ra một chuỗi "Khanh" được lưu trữ trong vùng nhớ gọi là String pool. Khi bạn tạo các biến String khác cũng có nội dung là "Khanh", Java sẽ trả về chuỗi "Khanh" đã được tạo ra trước đó trong String pool. Vì vậy, khi so sánh những đối tượng như thế này, kết quả sẽ luôn là true.
Đối với trường hợp thứ ba, khi so sánh những String được khai báo trong dấu ngoặc kép bằng toán tử quan hệ "==", kết quả cũng luôn là true.
Ví dụ:
System.out.println("Khanh" == "Khanh");
Kết quả:
Khái niệm Immutable trong String
Khi làm việc với String, chúng ta sẽ gặp khái niệm "Immutable". Immutable là khái niệm để chỉ đối tượng mà nội dung hoặc trạng thái của nó không thể bị thay đổi bởi bất kỳ đối tượng nào khác.
Và String là một đối tượng Immutable!
Vậy làm thế nào String có thể là một đối tượng Immutable? Điều này xảy ra vì:
-
String lưu trữ giá trị của mình trong một biến mảng với kiểu dữ liệu char. Biến mảng này được định nghĩa là private.
-
Biến mảng này được khai báo với từ khóa final. Một biến được khai báo với từ khóa final chỉ có thể được khởi tạo một lần duy nhất.
-
Không có phương thức nào trong đối tượng String thao tác với biến mảng này.
Nếu bạn muốn tìm hiểu chi tiết hơn, bạn có thể xem thêm tại đây.
Bài viết gốc được đăng tải tại huongdanjava.com
Có thể bạn quan tâm:
- Lập trình hướng đối tượng (OOPs) trong java
- Tìm hiểu về ES6 trong Javascript
- Java Reflection là gì? Hướng dẫn Java Reflection API
Xem thêm Việc làm Java lương cao hấp dẫn trên TopDev