01/10/2018, 15:37

Hỏi về == và equals trong Java

tình hình là em có đoạn code ntn ạ.

public class viDu {
String ten;

public static void main(String[] args) {

	String c = "abc";
	String d = "abc";
	System.out.println(c==d);
	System.out.println(c.equals(d));

}

}
em nghĩ là == là so sánh địa chỉ ô nhớ thì nó phải là false chứ nhỉ. em chạy nó vẫn ra true. anh nào giải thích giùm em với

X viết 17:45 ngày 01/10/2018

Trên diễn đàn đã có nhiều topic nói về vấn đề này rồi bạn.
https://daynhauhoc.com/t/object-comparison-and-cloning/32975
https://daynhauhoc.com/t/operator-string-in-java/32841
https://daynhauhoc.com/t/string-literal-va-new-string-trong-java/34541

Ngoclong Pham viết 17:50 ngày 01/10/2018

[quote=“alway5dotcom, post:2, topic:67116”]
the original thread was dissected into different pieces so that the whole context was falsified and
[mình hiểu ý nghĩa của == và equals. nhưng trong trường hợp trên thì rõ ràng nó tham chiếu đến 2 ô nhớ khác nhau nhưng tại sao c==d vẫn cho kết quả true. theo mình nghĩ nó phải là false chứ

Phong Nt viết 17:40 ngày 01/10/2018

Nếu không khai báo new, khi gán String d = “abc” thì máy sẽ tìm xem có string nào trong heap là “abc” không, nếu có thì trỏ vào, nếu không thì tạo mới rồi trỏ vào nên trong code của bạn đã có String c = “abc” nên nó sẽ trỏ vào luôn mà không phải tạo vùng nhớ mới, nên vùng nhớ của hai biến tham chiếu c, d chiếu tới là giống nhau, nên kết quả của toán từ == trả về là true…

Bài liên quan
0