equals() vs == câu hỏi kinh điển phỏng vấn fresher và internship.

Để hiểu rõ hơn về sự so sánh này đầu tiên bạn hãy dùng kĩ năng của mình và kiểm tra xem kết quả của chương trình này sẽ như thế nào, đừng vội………….nhé.

Ở dòng số 9 và dòng số 11 text1 và text2 đều có giá trị là text1 . Rõ ràng là có cùng 1 giá trị.

Kết quả :

Tại sao lại như vậy:

  • Thứ nhất : text1 và text2 được khởi tạo bởi từ khóa new nên jvm sẽ cung cấp 2 vùng nhớ khác nhau để chứa 2 object text1 và text2  .
  • Thứ hai : Trong JAVA, có 2 kiểu biến: biến tham trị & tham chiếu.
    • 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ả 2 toán tử == hoặc là equals().

Trở lại vấn đề thứ nhất

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âu trở lời là không bởi vì chúng không cùng vùng nhớ mặc dù chúng có cùng

HASHCODE()

khi 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 đó mặc dù không cùng 1 vùng nhớ.

Chốt lại:

  • Trong JAVA, có 2 kiểu biến: biến tham trị & tham chiếu.
    • 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ả 2 toán tử == hoặc là equals().
  • equals() được dùng để so sánh các biến object (điển hình là biến String, với các class tuỳ biến thì developer cần phải tự implement hàm override cho hàm equals() .
    Toán tử == được dùng để so sánh các biến primitive, như các biến giá trị có kiểu int, long, double…
  • Lưu ý: Khi thực hiện so sánh == giữa một biến object (ví dụ biến có kiểu Integer, Long, Double) với một biến primitive (ví dụ biến có kiểu int, long, double) thì Java sẽ tự động lấy giá trị của các biến object để so sánh với biến primitive.

Các bạn có thể tham khảo ngay code core String.java là hiểu ngay bản chất của nó.

Oke. Hi vọng qua bài này sẽ giúp các bạn hiểu rõ hơn về hai toán tử phổ biến bậc nhất trong java.

 

 

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
x