30/09/2018, 17:33
Hỏi về 2 kiểu so sánh trong Java
Mọi người cho hỏi sự khác nhau giữa 2 cái này?? Em đọc mãi chả hiểu! 1 cái in ra T 1 cái F là sao nhỉ!
Integer n1= new Integer(1);
Integer n2= new Integer(1);
System.out.println(n1==n2);
System.out.println(n1.equals(n2));
Output:
false
true
Bài liên quan
Bởi vì
n1
vàn2
là hai thực thể khác nhau. Ở trường hợp nàyoperator==
sẽ so sánh xem hai thực thể này có phải là một hay không. Mà chắc chắn làn1
vàn2
là hai thực thể khác nhau rồi. Thế nên kết quả trả về làfalse
Khai báo hai thực thể
n1
vàn2
riêng biệt.Trong khi đó equals không quan tâm đến việc so sánh thực thể, mà so sánh giá trị
int
nằm bên trong thực thển1
vàn2
. Cả hai giá trịint
nằm bên trongn1
vàn2
đều bằng1
. Thế nên kết quả trả về làtrue
Cần tìm hiểu kỹ về sự khác nhau giữa equal() và ==, Wrapper class, Autoboxing và Autounboxing
Ok! Cám ơn anh! Em đã hiểu!
Em bấm vào trên câu trả lời mà em cho là đúng nhé.
Mình bổ sung 1 vài kiến thức cơ bản cho câu hỏi của bạn:
Integer n1= new Integer(1);
Bản chất sẽ tạo ra 2 biến (Variable):
new Integer(1))
tạo ra 1 Object trong bộ nhớ.n1
, giống như một con trỏ sẽ trỏ vào vị trí của Object được tạo ra ở trên trong bộ nhớ.Như vậy
Integer n1= new Integer(1); Integer n2= new Integer(1);
Sẽ tạo ra 2 Reference khác nhau và 2 Object khác nhau (nhưng cùng giá trị).
Khí bạn dùng
==
sẽ so sánh Reference -> khác nhauKhí bạn dùng
Equals()
sẽ so sánh Object, cụ thể hàm Equal của Integer sẽ so sánh giá trị -> bằng nhau (đều là 1).