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

Mai Anh Dũng viết 19:47 ngày 30/09/2018

Bởi vì n1n2 là hai thực thể khác nhau. Ở trường hợp này operator== 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à n1n2 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ể n1n2 riêng biệt.

Integer n1= new Integer(1);
Integer n2= new Integer(1);

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ể n1n2. Cả hai giá trị int nằm bên trong n1n2 đều bằng 1. Thế nên kết quả trả về là true

Truong Pham viết 19:45 ngày 30/09/2018

Cần tìm hiểu kỹ về sự khác nhau giữa equal() và ==, Wrapper class, Autoboxing và Autounboxing

Hoài Nam viết 19:43 ngày 30/09/2018

Ok! Cám ơn anh! Em đã hiểu!

Mai Anh Dũng viết 19:36 ngày 30/09/2018

Em bấm vào trên câu trả lời mà em cho là đúng nhé.

Cương Nguyễn viết 19:37 ngày 30/09/2018

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):

  • Object variable: new Integer(1)) tạo ra 1 Object trong bộ nhớ.
  • Reference variable: 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 nhau
Khí 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).

Bài liên quan
0