1. Porównanie ciągów znaków
Wszystko jest świetne. Ale widać, że linie s1i s2są 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 Stringma 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 Stringma 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 Lmała, a druga to itylko 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 texti messagewskazują różne obiekty zawierające ten sam tekst.
GO TO FULL VERSION