Porównanie stringów

Porównanie stringów
M9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

Witam, mam problem z poniższym kodem:

Kopiuj
import java.util.Scanner;

class test
{
    public static void main(String args[])
    {
        Scanner scan = new Scanner(System.in);
        String s1 = scan.nextLine();
        String s2 = scan.nextLine();
        boolean n = s1 == s2;
        System.out.println(n);
    }
}

Powinno przy wpisaniu dwóch tych samych wartości powinno wypisać true, a wypisuje false. Przy zamienieniu scannera na jakieś stałe stringi to działało normalnie

C.mind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 95
3

Za pomocą operatora == porównujesz tutaj same referencje, czyli czy są to te same obiekty.
Jeśli chcesz porównać zawartość Stringów, używaj metody equals().

NN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 239
2

Jakby Cię interesowało, dlaczego przy zmianie scannera na "jakieś stałe stringi" działa to poczytaj: https://www.ntu.edu.sg/home/ehchua/programming/java/J3d_String.html

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

Generalnie WSZYSTKIE obiekty porównuje się przez .equals() i należy sobie to wbić do głowy. Szczególnie, że niektóre klasy mają swoje zabawne internalne cache (np. String czy Integer) i zupełnie przypadkiem == może czasem działać, przez co autor kodu może w ogóle przeoczyć taki błąd. Debugowałem kiedyś taki problem, gdzie wszystko działało ok dopóki liczba requestów była < 128, a potem działy się dziwne rzeczy, właśnie dlatego że ktoś Integer porównywał przez == i działało dopóki wartości szły z cache :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.