Подтвердить что ты не робот

Что более эффективно: if (null == variable) или if (variable == null)?

В Java, который будет более эффективным, и каковы различия?

if (null == variable)

или

if (variable == null)
4b9b3361

Ответ 1

(Аналогично этому вопросу: Разница между нулем == объект и объект == null)

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

Интересно, однако, скомпилированный байт-код (как испускаемый Suns javac) выглядит несколько иначе для этих двух случаев.

Для boolean b = variable == null:

 3: aload_1               // load variable
 4: ifnonnull 11          // check if it null
 7: iconst_1              // push 1
 8: goto 12           
11: iconst_0              // push 0
12: istore_2              // store

Для boolean b = null == variable:

 3: aconst_null           // push null
 4: aload_1               // load variable
 5: if_acmpne 12          // check if equal
 8: iconst_1              // push 1
 9: goto 13
12: iconst_0              // push 0
13: istore_2              // store

Как говорит @Bozho, variable == null является наиболее распространенным, стандартным и предпочтительным стилем.

Однако для некоторых ситуаций я склоняю перед собой null. Например, в следующем случае:

String line;
while (null != (line = reader.readLine()))
    process(line);

Ответ 2

Никакой разницы.

if (variable == null) является (imo) лучшим стилем программирования.

Обратите внимание, что null является строчным в Java.

Ответ 3

Это называется "Условия Yoda" , и целью является предотвращение случайного использования присваивания (=) вместо проверки равенства (==).

Ответ 4

нет разницы

(null == variables) иногда использовался в старые добрые времена (язык C) чтобы избежать написания: (variable = NULL) по ошибке

Ответ 5

Короткий ответ: никакой разницы.

Более длинный ответ: есть стилистическая разница, которая довольно субъективна. Некоторые люди утверждают, что константы должны быть слева как оборонительный стиль, на всякий случай, если вы ошибаетесь == в =. Некоторые люди утверждают, что константы должны быть в порядке, потому что они более естественны и читабельны.

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

Связанные вопросы

Пожалуйста, используйте функцию поиска в следующий раз.

Ответ 6

Первый - это зависание от C, где вполне законно писать if(variable = NULL)

Ответ 7

От точки зрения производительности нет существенного различия.

Однако... что, если вы сделали опечатку и пропустили один символ равенства?

foo = null; // assigns foo to null at runtime... BAD!

против

null = foo; // compile time error, typo immediately caught in editor,
developer gets 8 hours of sleep

Это один аргумент в пользу начала теста if с нулевым значением в левой части.

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

@aiooba также указывает на этот второй аргумент:

В некоторых ситуациях, однако, я склонен поставить нуль впереди. Для экземпляр в следующем случае:

String line;
while (null != (line = reader.readLine()))
    process(line);

Ответ 8

Мое мнение: не заботятся о такой незначительной оптимизации производительности. Если у вас плохая производительность, найдите и задайте реальные проблемы/узкие места в вашем коде.

Ответ 9

Нет никакой разницы.