Вызов равен на строковом литерале

Цитата Вопросы и рекомендации по стилю и технике B ++ C ++ для Bjarne Stroustrup FAQ , причина, по которой размер отличен от нуля, - «Чтобы адреса двух разных объектов были разными». И размер может быть 1, потому что выравнивание здесь не имеет значения, поскольку на самом деле ничего не стоит смотреть.

23
задан Taylan Aydinli 18 December 2013 в 19:06
поделиться

4 ответа

1111 Я не согласен с некоторыми ответами. Иногда вы действительно хотите знать, является ли ваша переменная null. Это может быть признаком того, что в вашем коде происходит что-то плохое, и вы можете пересмотреть свою логику.

Мне не нравится делать if("someString".equals(myString));, потому что я действительно хочу знать, является ли myString null, и, возможно, справиться с этим или изменить мою логику, чтобы предотвратить подобные ситуации.

Представьте, что у вас есть массив объектов, который был просчитан из-за какой-то ошибки:

myStrings = {..., ..., null, null, ...};

Затем вы хотите выполнить некоторые операции над объектами массива, и вы ' будет иметь:

if("myString".equals(myObjArray[i])) { ... } 

Вы не получите NullPointerException, и вы будете думать, что выполнили операцию со всеми объектами в массиве ... И вы никогда не будете знаю, что вы просчитались, потому что «скрыли» исключение. Принимая во внимание, что если вы сделали:

if(myObjArray[i].equals("myString")) { ... } 

Вы получите NPE , и вы узнаете, что что-то не так в массиве ... и вы можете исправить это или обработать это в по-другому.

8
ответ дан Maroun 18 December 2013 в 19:06
поделиться
if("true".equals(saving)){
   // do something
}

Это очень безопасная и хорошая практика. Строка «true» никогда не будет нулевой. Таким образом, вы никогда не сравните свою строку с нулем. Этот кусок кода отлично подходит

5
ответ дан k4sia 18 December 2013 в 19:06
поделиться

Извините, но я не могу согласиться по этому вопросу.

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

  1. для добавления функциональности,
  2. исправить ошибку программирования
  3. или пытаться поддерживать структуры, чтобы избежать ошибок программирования (таких как шаблоны проектирования) .

Сверху у вас есть слабое утверждение о переменной. Следующий код всегда должен проверять наличие нулевых значений.

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

В вашем собственном коде избегайте нуля в качестве параметра или возвращаемого значения, поэтому больше не будет необходимости в проверках на нуль, включая предложенный фрагмент кода.

Видите ли, эта тема больше о том, чтобы избежать нуля, чем принять его, чтобы завоевать ваш код.

3
ответ дан oopexpert 18 December 2013 в 19:06
поделиться

Не только безопасный, но также предпочтительный способ решения этой проблемы.

0
ответ дан Marcin Szymczak 18 December 2013 в 19:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: