Jaka jest różnica między operatorem == a metodą equals() podczas porównywania Stringów w Javie?

Porównywanie obiektów typu String w języku Java może być realizowane na dwa główne sposoby: za pomocą operatora == oraz metody equals(). Oba podejścia służą do sprawdzania, czy dwa stringi są “takie same”, ale różnią się fundamentalnie w tym, jak interpretują znaczenie “takie same”.

Porównanie za pomocą ==

Operator == porównuje referencje, czyli adresy w pamięci, pod którymi znajdują się obiekty. W przypadku stringów, == zwróci true tylko wtedy, gdy obie zmienne wskazują dokładnie na ten sam obiekt w pamięci.

Porównanie za pomocą equals()

Metoda equals(), zdefiniowana w klasie Object i przesłonięta w klasie String, porównuje zawartości dwóch stringów. Jeśli oba ciągi znaków są identyczne znak po znaku, equals() zwróci true, niezależnie od tego, czy stringi są przechowywane w tej samej lokalizacji pamięci.

Przykład kodu

Przygotujmy teraz przykład, który pokaże różnice w działaniu obu podejść. W przykładzie porównamy dwa stringi – jeden stworzony przez literał, a drugi przez wywołanie konstruktora.

public class StringComparison {

    public static void main(String[] args) {
        // String utworzony przez literał
        String str1 = "Hello";
        
        // String utworzony przez new - nowy obiekt w pamięci
        String str2 = new String("Hello");

        // Porównanie za pomocą ==
        // Sprawdza czy str1 i str2 to ten sam obiekt w pamięci
        System.out.println("Porównanie przez ==: " + (str1 == str2));  // false

        // Porównanie za pomocą equals()
        // Sprawdza czy zawartość str1 i str2 jest taka sama
        System.out.println("Porównanie przez equals(): " + str1.equals(str2));  // true
    }
}

Analiza kodu

  • str1 == str2 zwraca false, ponieważ str1 jest referencją do obiektu w puli stringów (intern pool), gdzie Java przechowuje swoje literały, a str2 jest referencją do obiektu utworzonego na stercie za pomocą słowa kluczowego new.
  • str1.equals(str2) zwraca true, ponieważ metoda equals porównuje wartości znaków obu stringów, które są identyczne.

Podsumowanie

Podczas pracy ze stringami w Javie kluczowe jest zrozumienie różnicy między == a equals(). Używając ==, sprawdzamy, czy oba obiekty wskazują na to samo miejsce w pamięci. Metoda equals() jest natomiast używana do porównania rzeczywistej zawartości stringów. Znajomość tej różnicy jest niezbędna, aby uniknąć błędów w logice porównywania danych w aplikacjach.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top