Порядок сравнения строк в Java - PullRequest
5 голосов
/ 04 сентября 2010

Оба метода сравнения строк, представленные ниже, считаются равными

public class TestString {
    public static final String CONSTVAL="foo";

    public boolean testString1(String testVal) {
        return testVal.equalsIgnoreCase(CONSTVAL);
    }

    public boolean testString2(String testVal) {
        return CONSTVAL.equalsIgnoreCase(testVal);
    }
}

или один тип сравнения предпочтительнее другого?

Ответы [ 4 ]

18 голосов
/ 04 сентября 2010

Вы должны вызывать equals для константы, так как это исключает риск возникновения NullPointerException, когда testVal равно нулю.

public boolean testString2(String testVal) {
    return CONSTVAL.equalsIgnoreCase(testVal);
}
5 голосов
/ 04 сентября 2010

Одним из преимуществ последнего является то, что оно не будет выдавать исключение, если testVal равно нулю.

Я ожидаю, что результаты будут такими же, кроме этого.

2 голосов
/ 04 сентября 2010

На первый взгляд, я согласен с @Jon Skeet, но потом я заметил, что CONSTVAL не является окончательным .

Если бы он был окончательным, то testString2 () - самый безопасный и лучшийспособ проверить на равенство.

0 голосов
/ 04 сентября 2010

Когда константное значение сравнивается с другим значением, вы почти наверняка не получите нулевое значение.

В вашем случае

new TestString().testString1(null);

выдаст исключение, тогда как

new TestString().testString2(null);

привычка.

Но этот вид обозначений можно рассматривать как условие йоды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...