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
zwracafalse
, ponieważstr1
jest referencją do obiektu w puli stringów (intern pool), gdzie Java przechowuje swoje literały, astr2
jest referencją do obiektu utworzonego na stercie za pomocą słowa kluczowegonew
.str1.equals(str2)
zwracatrue
, ponieważ metodaequals
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.