1. So sánh các chuỗi
Đây là tất cả tốt và tốt. Nhưng bạn có thể thấy rằng các chuỗi s1
và s2
thực sự giống nhau, nghĩa là chúng chứa cùng một văn bản. Khi so sánh các chuỗi, làm thế nào để bạn yêu cầu chương trình không nhìn vào địa chỉ của String
các đối tượng mà nhìn vào nội dung của chúng?
Để giúp chúng ta làm điều này, String
lớp của Java có equals
phương thức. Gọi nó trông như thế này:
string1.equals(string2)
Phương thức này trả về true
nếu các chuỗi giống nhau và false
nếu chúng không giống nhau.
Ví dụ:
Mã số | Ghi chú |
---|---|
|
|
Thêm ví dụ:
Mã số | Giải trình |
---|---|
|
false |
|
true |
|
true |
|
true |
2. So sánh chuỗi không phân biệt chữ hoa chữ thường
Trong ví dụ trước, bạn đã thấy rằng kết quả so sánh là . Thật vậy, các chuỗi không bằng nhau. Nhưng..."Hello".equals("HELLO")
false
Rõ ràng, các chuỗi không bằng nhau. Điều đó nói rằng, nội dung của chúng có các chữ cái giống nhau và chỉ khác nhau về trường hợp của các chữ cái. Có cách nào để so sánh chúng và bỏ qua trường hợp của các chữ cái không? Đó là, do đó sản lượng ?"Hello".equals("HELLO")
true
Và câu trả lời cho câu hỏi này là có. Trong Java, String
kiểu này có một phương thức đặc biệt khác: equalsIgnoreCase
. Gọi nó trông như thế này:
string1.equalsIgnoreCase(string2)
Tên của phương thức tạm dịch là so sánh nhưng bỏ qua chữ hoa chữ thường . Các chữ cái trong tên của phương thức bao gồm hai dòng thẳng đứng: dòng đầu tiên là chữ thường L
và dòng thứ hai là chữ hoa i
. Đừng để điều đó làm bạn bối rối.
Ví dụ:
Mã số | Ghi chú |
---|---|
|
|
3. Ví dụ so sánh chuỗi
Hãy chỉ đưa ra một ví dụ đơn giản: giả sử bạn cần nhập hai dòng từ bàn phím và xác định xem chúng có giống nhau không. Đây là những gì mã sẽ trông như thế nào:
Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);
4. Một sắc thái thú vị của so sánh chuỗi
Có một sắc thái quan trọng mà bạn cần lưu ý.
Nếu trình biên dịch Java tìm thấy nhiều chuỗi giống hệt nhau trong mã của bạn (cụ thể là trong mã của bạn), thì nó sẽ chỉ tạo một đối tượng duy nhất cho chúng để tiết kiệm bộ nhớ.
String text = "This is a very important message";
String message = "This is a very important message";
Và đây là kết quả bộ nhớ sẽ chứa:

Và nếu bạn so sánh text == message
ở đây, thì bạn nhận được true
. Vì vậy, đừng ngạc nhiên bởi điều đó.
Nếu vì lý do nào đó mà bạn thực sự cần các tham chiếu khác đi, thì bạn có thể viết như sau:
String text = "This is a very important message";
String message = new String ("This is a very important message");
Hoặc cái này:
String text = "This is a very important message";
String message = new String (text);
Trong cả hai trường hợp này, các biến text
và message
trỏ đến các đối tượng khác nhau chứa cùng một văn bản.
GO TO FULL VERSION