Verschil tussen == en equals() in Java

In dit bericht bespreken we het verschil tussen de == operator en de equals() methode in Java.

De == is een relationele operator in Java die wordt gebruikt om primitieve types zoals int, double, char, float, enz. te vergelijken. Hij mag niet worden gebruikt om twee objectverwijzingen te vergelijken, omdat x == y voor elke niet-nule verwijzing x en y alleen waar retourneert wanneer x en y naar hetzelfde object verwijzen.

equals() daarentegen is een methode in de klasse Object die wordt gebruikt om objecten te vergelijken. Het gedraagt zich vergelijkbaar met de == operator als deze niet wordt overruled door een klasse. Elke klasse moet de methode equals() van de klasse Object overriden en de equivalentie relatie op objecten specificeren. De gelijkwaardigheidsrelatie moet zodanig zijn dat de methode equals() evalueert naar de vergelijking van waarden in de objecten, ongeacht of de twee objecten naar dezelfde instantie verwijzen of niet. Aangezien gelijke objecten gelijke hash codes moeten hebben, is het noodzakelijk om ook de hashCode() methode te overschrijven.

Omdat String een object is in Java, moeten we altijd equals() methode gebruiken voor het vergelijken van twee strings in Java. Dit werkt omdat de String klasse equals() methode van de Object klasse overrides.

Zoals blijkt uit het bovenstaande programma, het vergelijken van twee strings met behulp van == en equals() methode retourneert verschillende output. Dit komt omdat == een referentievergelijking uitvoert, d.w.z. vergelijkt of twee variabelen naar hetzelfde object verwijzen of niet. Omdat we twee nieuwe String-objecten maken met behulp van de String-constructor, zullen ze niet dezelfde referentie delen en s1 == s2 geeft onwaar terug. Daarom moeten we nooit == gebruiken voor het vergelijken van twee strings.

Aan de andere kant vergelijkt equals() methode van String de inhoud van de achterliggende char array en retourneert een booleaanse waarde als resultaat van de vergelijking.

Onderstaande code geeft echter verschillende resultaten. Dit komt omdat String-literals worden opgeslagen in String constant pool, en beide s1 & s2 zullen dezelfde referentie delen. Dus s1 == s2 retourneert true.

(6 stemmen, gemiddelde: 5,00 van 5)

Bedankt voor het lezen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.