1. Porównanie ciągów znaków
Wszystko jest świetne. Ale widać, że linie s1
i s2
są właściwie takie same - zawierają ten sam tekst. Jak powiedzieć programowi, że porównując napisy, nie patrzy na adresy obiektów String
, ale na ich zawartość?
Aby to zrobić, w Javie typ String
ma specjalną metodę - equals
. Wezwanie wygląda następująco:
string1.equals(string2)
Ta metoda zwraca true
(true), jeśli łańcuchy są takie same i false
(false), jeśli nie są takie same.
Przykład:
Kod: | Notatka |
---|---|
|
|
Więcej przykładów:
Kod | Wyjaśnienie |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Porównywanie ciągów bez rozróżniania wielkości liter
W ostatnim przykładzie widziałeś, że porównanie daje . Rzeczywiście, linie nie są równe. Chociaż..."Hello".equals("HELLO")
false
Wiersze oczywiście nie są równe, ale jest w nich napisane to samo, tylko rozmiar (wielkość liter) jest inny. Czy jest jakiś sposób, aby je porównać, aby rozmiar liter nie był brany pod uwagę? Cóż, dać ?"Hello".equals("HELLO")
true
A odpowiedź na to pytanie brzmi: tak. W Javie typ String
ma inną specjalną metodę - equalsIgnoreCase
. Wezwanie wygląda następująco:
string1.equalsIgnoreCase(string2)
Nazwa metody jest tłumaczona jako porównaj, ignorując wielkość liter . W nazwie metody są dwie kreski pionowe: pierwsza to L
mała, a druga to i
tylko duża. Nie myl.
Przykład:
Kod: | Notatka |
---|---|
|
|
3. Przykład porównania ciągów znaków
Podajmy tylko jeden prosty przykład: musisz wprowadzić dwie linie z klawiatury i ustalić, czy są one takie same, czy nie. Oto jak wyglądałby ten kod:
Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);
4. Ciekawy niuans porównania strun
Jest jeden ważny niuans, o którym musisz wiedzieć.
Jeśli kompilator Java znajdzie kilka identycznych linii w twoim kodzie (mianowicie w kodzie), utworzy dla nich tylko jeden obiekt, aby zaoszczędzić pamięć.
String text = "This is a very important message";
String message = "This is a very important message";
A oto, co w rezultacie zostanie w pamięci:
A jeśli w tym przypadku porównasz ze sobą text == message
, otrzymasz true
. Więc nie bądź zaskoczony.
A jeśli nagle naprawdę potrzebujesz, aby linki były inne, możesz napisać to:
String text = "This is a very important message";
String message = new String ("This is a very important message");
Lub tak:
String text = "This is a very important message";
String message = new String (text);
W obu przypadkach zmienne text
i message
wskazują różne obiekty zawierające ten sam tekst.
GO TO FULL VERSION