Để so sánh chuỗi về mặt bằng nhau, nên dùng method equals hoặc equalsIgnoreCase của String. Cũng sẽ thấy tại sao không nên dùng toán tử ==.
So sánh chuỗi với equals()
Dùng equals() khi quan tâm đến chữ hoa/thường.
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = "Test123";
String secondString = "Test" + 123;
String thirdString = "TEST123";
if (firstString.equals(secondString)) {
System.out.println("first and second strings are equal");
}
if (firstString.equals(thirdString)) {
System.out.println("first and third string are equal");
}
}
}
Kết quả: chỉ in "first and second strings are equal" (vì thirdString khác chữ hoa/thường).
So sánh chuỗi với equalsIgnoreCase()
Dùng equalsIgnoreCase() khi không quan tâm chữ hoa/thường.
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = "Test123";
String secondString = "Test" + 123;
String thirdString = "TEST123";
if (firstString.equalsIgnoreCase(secondString)) {
System.out.println("first and second strings are equal");
}
if (firstString.equalsIgnoreCase(thirdString)) {
System.out.println("first and third string are equal");
}
}
}
Kết quả: in cả hai dòng.
- Tại sao override toString() trong Java
- Cách đảo ngược chuỗi trong Java
- Cách trích xuất số từ chuỗi
- Cách chuyển String sang Int trong Java
Không dùng toán tử == để so sánh String
Toán tử == và != test reference (tham chiếu), không phải giá trị. Nhiều String object có thể biểu diễn cùng một chuỗi -> cho kết quả sai.
Thay vào đó, dùng String.equals(Object) so sánh dựa trên giá trị.
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = "Test123";
String secondString = "Test123";
String thirdString = new String("Test123");
if (firstString == secondString) {
System.out.println("first and second strings are equal");
}
if (firstString == thirdString) {
System.out.println("first and third strings are equal");
}
}
}
Kết quả: chỉ in dòng đầu (string literal cùng reference, new String tạo object mới).
So sánh String với giá trị hằng số
Khi so sánh String với hằng số, đặt hằng số bên trái equals để tránh NullPointerException nếu String kia null.
"baz".equals(foo)
foo.equals("baz") ném NPE nếu foo null, còn "baz".equals(foo) trả về false.
Thay thế dễ đọc hơn: Objects.equals(foo, "baz") - kiểm tra null cho cả hai tham số.
So sánh String trong switch statement
Từ Java 1.7, có thể so sánh String variable với literal trong switch. Đảm bảo String không null (ném NPE). So sánh dùng String.equals (case sensitive).
public class CompareTwoStrings {
public static void main(String[] args) {
String stringToSwitch = "A";
switch (stringToSwitch) {
case "a": System.out.println("a"); break;
case "A": System.out.println("A"); break;
case "B": System.out.println("B"); break;
default: break;
}
}
}
Kết luận
- Quan tâm chữ hoa/thường ->
.equals() - Không quan tâm chữ hoa/thường ->
.equalsIgnoreCase() - Không dùng
==vì nó kiểm tra reference, không phải giá trị - So sánh với hằng số -> đặt hằng số bên trái hoặc dùng
Objects.equals()