1. Сравняване на низове
Всичко това е добре. Но можете да видите, че низовете s1
и s2
всъщност са еднакви, което означава, че съдържат един и същ текст. Когато сравнявате низове, How казвате на програмата да гледа не addressите на String
обектите, а тяхното съдържание?
За да ни помогне с това, класът на Java String
има equals
метода. Извикването изглежда така:
string1.equals(string2)
Този метод връща, true
ако низовете са еднакви и false
ако не са еднакви.
Пример:
Код | Забележка |
---|---|
|
|
Още примери:
Код | Обяснение |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Сравнение на низове без meaning за малки и главни букви
В последния пример видяхте, че сравнението дава . Наистина низовете не са равни. Но..."Hello".equals("HELLO")
false
Ясно е, че низовете не са равни. Въпреки това съдържанието им има едни и същи букви и се различава само по регистъра на буквите. Има ли няHowъв начин да ги сравним и да пренебрегнем регистъра на буквите? Тоест, така че дава ?"Hello".equals("HELLO")
true
И отговорът на този въпрос е да. В Java типът String
има друг специален метод: equalsIgnoreCase
. Извикването изглежда така:
string1.equalsIgnoreCase(string2)
Името на метода се превежда приблизително като сравняване, но пренебрегване на главни и малки букви . Буквите в името на метода включват две вертикални линии: първата е малка L
, а втората е главна i
. Не позволявайте това да ви обърква.
Пример:
Код | Забележка |
---|---|
|
|
3. Пример за сравнение на низове
Нека дадем само един прост пример: да предположим, че трябва да въведете два реда от клавиатурата и да определите дали са еднакви. Ето How ще изглежда codeът:
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. Интересен нюанс на сравнение на низове
Има един важен нюанс, който трябва да знаете.
Ако компилаторът на Java намери множество идентични низове във вашия code (по-специално във вашия code), тогава той ще създаде само един обект за тях, за да спести памет.
String text = "This is a very important message";
String message = "This is a very important message";
И ето Howво ще съдържа паметта като резултат:
И ако сравните text == message
тук, тогава ще получите true
. Така че не се изненадвайте от това.
Ако по няHowва причина наистина се нуждаете референциите да са различни, тогава можете да напишете това:
String text = "This is a very important message";
String message = new String ("This is a very important message");
Или това:
String text = "This is a very important message";
String message = new String (text);
И в двата случая променливите text
и message
сочат към различни обекти, които съдържат един и същи текст.
GO TO FULL VERSION