2015-06-02 2 views
4

Я видел различные коды моих пожилых людей, и они использовали это во многих местах. Какой эффект у него есть? почему они не включают anything != null. Это справедливо и для нижеприведенного значенияЗачем использовать null! = Что угодно, а не что-нибудь! = Null?

"true".equals(x).

Почему это так?

+3

Это вы что искали? http://stackoverflow.com/q/2369226/1065197 –

ответ

9

anything != null в точности эквивалентен null != anything.

С другой стороны, "true".equals(x) избегает необходимости проверять, является ли x равным нулю при выполнении x.equals("true").

1

Эта проверка, поэтому программа гарантирует, что переменная, о которой идет речь, была инициализирована перед ее чтением. Если программа пытается получить доступ к нулевой переменной, она выйдет из строя (в частности, в Java она выкинет NullPointerException). Это критический аспект защитного программирования.

Что касается заказа, оценка того, является ли что-то нулевым или нет, является коммутативным. Значение:

something != null 

То же самое,

null != something 

Это все зависит от личных предпочтений. И как объясняет @manouti выше, "true".equals(x) избегает необходимости проверять, является ли x равным нулю при выполнении x.equals("true"), поэтому вы сохраняете строку кода.

+0

* «Эта проверка такова, что программа гарантирует, что переменная, о которой идет речь, была инициализирована перед ее чтением». * Как автоматически инициализируется переменная, изменяя порядок операнды 'equals'? И нет, я не ответил на ваш ответ, если вам интересно. – CKing

+0

Похоже, я неправильно понял вопрос. Я думал, что ему интересно, что такое нуль .... –

+0

@ Программисты @Lawrenece Программисты не всегда находятся на одной странице. Вы всегда можете отредактировать свой ответ. – CKing

2

Причина включения констант в левой части выражения equals заключается в том, чтобы избежать NullPointerException, даже если переменная равна нулю. Это также улучшает читаемость выражения.

Это, как говорится, null!=something является личным выбором, и я бы предпочел использовать something!=null.

0

Кажется, что некоторые люди предпочитают null != anything, потому что anything может быть довольно длинным выражение, поэтому писать null первый делает его видимым в узком окне и упрощает чтение кода («хорошо, мы просто проверить, если что-то не равно нулю»). Но это полностью вопрос стиля.

Что касается "true".equals(x), это хорошо объясняется @manouti.

2

Это две отдельные практики.

Использование null с левой стороны, если сравнивать с null гарантирует, что вы по ошибке не используете = вместо ==. Тем не менее, это практика, взятая из других, чем Java Языков, как и в Java Выражения

if (something = null) 

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

Таким образом, эта практика не имеет смысла в Java.


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

1

Это называется Yoda condition. В частности, это помогает предотвратить случайное назначение из-за отсутствия = или !, как в foo = null. Обратное, null = foo, даже не компилировалось.

Тем не менее, это чисто стилистическое предпочтение. foo != null логически эквивалентен null != foo.

+1

'foo = null' также не будет компилироваться, если он используется внутри оператора' if'/'while' или присваивается переменной' boolean'. –

Смежные вопросы