(a! = ноль) или (ноль! = a) - PullRequest
       18

(a! = ноль) или (ноль! = a)

5 голосов
/ 21 декабря 2011

Есть ли разница в сравнении переменной с null или сравнении null с переменной?

Например, какое сравнение лучше (a != null) или (null != a)?Я где-то читал, что второй быстрее, но не нашел причины для этого.

Ответы [ 6 ]

25 голосов
/ 21 декабря 2011

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

Это все пришло из C, где вы могли ошибочно написать

if(x = 3) 

вместо

if( x == 3)

Некоторые люди думали, что лучше сначала написать константу, и в этом случае, если вы напишите = вместо ==, вы получите ошибку компилятора. Поэтому некоторые источники рекомендуют писать

if(3 == x)

Некоторые люди не знали, почему это было необходимо и продолжали, и обобщили эту идею на конструкции и языки, где она не имеет абсолютно никакого смысла. По-моему, в оригинальном C-контексте это не имело особого смысла, но это вопрос личного вкуса.

9 голосов
/ 21 декабря 2011

Даже если бы было разницей в скорости, я бы ожидал, что она будет незначительной в 99,99% приложений.Как бы то ни было, я бы не ожидал, что будет любая разница в скорости.Лично я нахожу if (a != null) более читабельным - а читаемость намного важнее производительности в большинстве случаев.

4 голосов
/ 21 декабря 2011

Возможно, вы захотите использовать литерал перед переменной только при выполнении операций со строками.

if("abcd".equals(name)) не выбрасывает NPE, как if(name.equals("abcd")), если вообще name должно быть null.

3 голосов
/ 21 декабря 2011

Обычно это делается для предотвращения случайного назначения вместо сравнения:

( a = null ) //will not give error

( null = a ) //will give error

Я уверен, что эффективность не является причиной, и если бы это было так, оптимизатор отобразил бы код в двоичном коде.

0 голосов
/ 21 декабря 2011

не совсем, сейчас не в java.в более ранние времена, возможно, C, вы можете случайно забыть восклицательный знак, и код будет хорошо скомпилирован.в основном, a = null будет восприниматься как выражение, присваивающее значение NULL для a, и всегда будет иметь значение true (потому что присваивание прошло успешно).

Современные компиляторы гораздо более надежны.Хотя старые привычки сильно умирают, и я все еще пишу null != a: -)

0 голосов
/ 21 декабря 2011

Нет, нет никакой разницы, что когда-либо.

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