C#: Bạn có thể dễ dàng so sánh 2 chuỗi giống nhau bằng câu lệnh s1==s2 nhưng trong Java, bạn luôn nhận về kết quả false. Tại sao như vậy?
VD1:
String a = new String(“abc”);Trong JAVA, có 2 kiểu biến: biến tham trị và tham chiếu.
String b = new String(“abc”);
System.out.println(“a==b ? ”+ (a==b));// kết quả: a==b?false
System.out.println(“a.equals(b)?” + a.equals(b));// kết quả e.quals(b)?true
Biến kiểu tham trị bao gồm các kiểu nguyên thủy của JAVA như: int, long, double…
Biến kiểu tham chiếu bao gồm: String, array, kiểu đối tượng…
Khi sử dụng biến kiểu tham trị, JAVA chỉ cho phép bạn sử dụng toán tử so sánh “==”.
Khi sử dụng biến kiểu tham chiếu, JAVA cho phép sử dụng cả toán tử “==” và equals(). Tuy nhiên, khi sử dụng toán tử “==”, bộ xử lý của JAVA sẽ so sánh xem 2 biến tham chiếu này có trỏ đến cùng một đối tượng hay không, còn nếu bạn sử dụng phương thức equals(), bộ xử lý JAVA sẽ so sánh giá trị của 2 biến tham chiếu đó. Điều này lý giải tại sao ở ví dụ trên, khi sử dụng phép toán: a.equals(b) => kết quả trả về bằng true, trong khi a==b => kết quả trả về lại bằng false.
Để hiểu hơn, tôi xét thêm một ví dụ nữa:
String a = new String(“abc”);Nếu bạn có thắc mắc gì hãy để lại comment. Hy vọng các bạn có được một kiến thức bổ ích.
String b = a;
System.out.println(“a==b ? ”+ (a==b));// kết quả: a==b?true
System.out.println(“a.equals(b)?” + a.equals(b));// kết quả e.quals(b)?true
Tham khảo và chỉnh sửa.
Nguồn: Mobile's program blog
Không có nhận xét nào:
Đăng nhận xét