Porównanie stringów

0

Witam, mam problem z poniższym kodem:

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

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().

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

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 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1