Для параўнання радкоў для роўнасці вы павінны выкарыстоўваць аб'ект String equals
альбо equalsIgnoreCase
метады. Мы таксама ўбачым, чаму мы не павінны выкарыстоўваць ==
аператар для параўнання радкоў.
Калі нам трэба параўнаць дзве радкі ў Java, а таксама клапаціцца пра корпус радкоў, мы можам выкарыстоўваць equals()
метад.
Напрыклад, наступны фрагмент вызначыць, ці аднолькавыя два экземпляры радка для ўсіх сімвалаў, уключаючы кожух:
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test' + 123;
String thirdString = 'TEST123';
if (firstString.equals(secondString)) {
System.out.println('first and second strings are equal');
}
if (firstString.equals(thirdString)) {
System.out.println('first and third string are equal');
}
} }
Выхад:
first and second strings are equal
нататка:Другі выказванне print не выконваецца, таму што рэгістр firstString і thirdString не супадаюць.Калі нам трэба параўнаць дзве радкі ў Java, але мы не клапоцімся пра корпус радкоў, мы можам выкарыстоўваць equalsIgnoreCase()
метад.
Напрыклад, у прыведзеным вышэй фрагменце кода, калі мы замянілі .equals()
з .equalsIgnoreCase()
, абедзве аператары друку выконваюцца:
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test' + 123;
String thirdString = 'TEST123';
if (firstString.equalsIgnoreCase(secondString)) {
System.out.println('first and second strings are equal');
}
if (firstString.equalsIgnoreCase(thirdString)) {
System.out.println('first and third string are equal');
}
} }
Выхад:
first and second strings are equal
first and third string are equal
Звязаныя:
Гэтыя аператары на самай справе тэстуюць спасылкі, і паколькі некалькі аб'ектаў String могуць прадстаўляць адзін і той жа радок, гэта можа даць няправільны адказ.
Замест гэтага выкарыстоўвайце String.equals(Object)
метад, які будзе параўноўваць аб'екты String на аснове іх значэнняў.
public class CompareTwoStrings {
public static void main(String[] args) {
String firstString = 'Test123';
String secondString = 'Test123';
String thirdString = new String('Test123');
if (firstString == secondString) {
System.out.println('first and second strings are equal');
}
if (firstString == thirdString) {
System.out.println('first and third strings are equal');
}
} }
Выхад:
first and second strings are equal
нататка:Другі аператар друку не выконваецца.Пры параўнанні радка з пастаянным значэннем вы можаце паставіць пастаяннае значэнне з левага боку роўна, каб пераканацца, што вы не атрымаеце NullPointerException
калі іншая радок нулявая.
Напрыклад:
'baz'.equals(foo)
Пакуль foo.equals('baz')
кіне знак NullPointerException
калі foo нулявы, 'baz'.equals(foo)
будзе ацэньваць у false
.
Больш чытэльнай альтэрнатывай з'яўляецца выкарыстанне Objects.equals()
, якое выконвае нулявую праверку абодвух параметраў:
напр. Objects.equals(foo, 'baz')
.
Пачынаючы з Java 1.7, можна параўноўваць зменную String з літараламі ў выказванні switch. Пераканайцеся, што радок не роўны нулю, інакш ён заўсёды будзе выдаваць NullPointerException
. Значэнні параўноўваюцца з выкарыстаннем String.equals
, гэта значыць з улікам рэгістра.
public class CompareTwoStrings {
public static void main(String[] args) {
String stringToSwitch = 'A';
switch (stringToSwitch) {
case 'a':
System.out.println('a');
break;
case 'A':
System.out.println('A'); //the code goes here
break;
case 'B':
System.out.println('B');
break;
default:
break;
}
} }
У гэтым паведамленні мы растлумачылі, як параўноўваць радкі ў Java з прыкладамі кода. Калі корпус радкоў мае значэнне, мы павінны выкарыстоўваць .equals()
а калі корпус не важны, мы павінны выкарыстоўваць .equalsIgnoreCase()
.
Больш за тое, мы не павінны выкарыстоўваць ==
аператар для параўнання радкоў, як ==
аператар правярае спасылку, а не значэнне.