Строковое равенство в Java - PullRequest
       1

Строковое равенство в Java

4 голосов
/ 31 декабря 2010

Я видел оба из них при проверке равенства двух Java String:

// Method A
String string1;
// ...
if("MyString".equals(string1)) {
    // ...
}

и

// Method B
String string1;
// ...
if(string1.equals("MyString")) {
    // ...
}

Мой вопрос: какой из них лучше иболее широко используется?

Ответы [ 6 ]

10 голосов
/ 31 декабря 2010

Если вы уверены, что string1 никогда не может быть нулевым, тогда вариант 2 читабелен и предпочтителен. В противном случае вариант 1. Намерение варианта 1 состоит в том, чтобы избежать потенциального нулевого указателя.

3 голосов
/ 31 декабря 2010

Метод A не будет генерировать исключение нулевого указателя. Нет лучшего из двух. Это зависит от того, хотите ли вы, чтобы он выбрасывал npe (и вы, возможно, захотите это в своем общем дизайне).

3 голосов
/ 31 декабря 2010

Метод B потерпит неудачу с NullPointerException на нулевой строке1, тогда как метод A никогда не сгенерирует это.Некоторые власти предписывают это «оборонительное» программирование.Они повлияли на меня, хотя это все еще не происходит естественным образом!

Можно также написать

if (string1 != null && string1.equals("MyString")) ...

, хотя такие инструменты, как FindBugs, отмечают это как возможную ошибку, предполагаяВы должны были убедиться, что string1 уже был ненулевым.(Можете ли вы рассчитывать на порядок оценки?).

Итак, существуют разные школы мысли.

0 голосов
/ 31 декабря 2010

Исключения предназначены для исключительной обработки и имеют больше накладных расходов, чем проверка на наличие ошибок и обработка их с помощью обычной логики.Если вы программируете в течение десятилетия, NPE - это непростой вопрос, который обычно указывает на небрежный код.Избегайте их, используя «константу» .equals (переменную), и люди, которые читают ваш код и используют его, будут счастливее.

0 голосов
/ 31 декабря 2010

Метод a не выбрасывает NullPointerException и, следовательно, очень удобно. Широко используется также.

0 голосов
/ 31 декабря 2010

Второй более широко используется. Ни то, ни другое лучше.

Это та же идея, что и

if (1 == x)

но без конкретной причины. но по другой причине. (Нулевой указатель, как отмечено другими). ​​

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