Đoạn code sau in ra gì, và vì sao?
String a = "abc";
String b = "abc";
String c = new String("abc");
System.out.println(a == b);
System.out.println(a == c);
System.out.println(a.equals(c));- A.true / true / true — cả ba biến cùng nội dung "abc" nên JVM tự gộp về một object duy nhất
- B.true / false / false — equals() của String so sánh reference giống ==, nên khác object là false
- C.false / false / true — == với String luôn trả false vì String là object, chỉ equals() mới so sánh được
- D.true / false / true — hai literal dùng chung String pool, còn
new Stringluôn tạo object mới
Đáp án: D
Kết quả: true / false / true. Hai literal "abc" cùng trỏ một object trong String pool nên a == b là true. new String("abc") luôn tạo object mới ngoài pool nên a == c là false. equals() so sánh nội dung ký tự nên a.equals(c) là true. Quy tắc: so sánh String luôn dùng equals(), không dùng ==.
Nguồn tham khảo