Różnica między == i equals() w Javie

W tym poście omówimy różnicę między == operatorem i metodą equals() w Javie.

==jest operatorem relacyjnym w Javie, który jest używany do porównywania typów prymitywnych, takich jak int, double, char, float, itp. Nie powinien być używany do porównywania dwóch referencji obiektów, ponieważ dla dowolnych nie-null wartości referencyjnych x i y, x == y zwraca true tylko wtedy, gdy x i y odnoszą się do tego samego obiektu.

equals(), z drugiej strony jest metodą w klasie Object, która jest używana do porównywania obiektów. Zachowuje się ona podobnie do operatora ==, jeśli nie jest nadpisana przez klasę. Każda klasa powinna nadpisać metodę equals() klasy Object i określić relację równoważności na obiektach. Relacja równoważności powinna być taka, że metoda equals() ocenia porównanie wartości w obiektach niezależnie od tego, czy dwa obiekty odnoszą się do tej samej instancji, czy nie. Ponieważ równe obiekty muszą mieć równe kody hash, konieczne jest również nadpisanie metody hashCode().

Ponieważ String jest obiektem w Javie, powinniśmy zawsze używać metody equals() do porównywania dwóch łańcuchów w Javie. Działa to, ponieważ klasa String nadpisuje metodę equals() klasy Object.

Jak wynika z powyższego programu, porównywanie dwóch ciągów za pomocą metody == i equals() zwraca różne dane wyjściowe. Dzieje się tak, ponieważ == wykonuje porównanie referencyjne, tj. porównuje, czy dwie zmienne odnoszą się do tego samego obiektu, czy nie. Ponieważ tworzymy dwa nowe obiekty String za pomocą konstruktora String, nie będą one miały tego samego odniesienia i s1 == s2 zwraca wartość false. Dlatego nigdy nie powinniśmy używać operatora == do porównywania dwóch łańcuchów.

Z drugiej strony, metoda equals() klasy String porównuje zawartość tablicy backed char i zwraca wartość boolean jako wynik porównania.

Jednakże poniższy kod daje inne wyniki. Dzieje się tak, ponieważ literały String są przechowywane w stałej puli String, a oba s1 & s2 będą dzielić to samo odniesienie. Tak więc s1 == s2 zwraca true.

(6 głosów, średnia: 5.00 na 5)

Dziękuję za przeczytanie.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.