В Java, который будет более эффективным, и каковы различия?
if (null == variable)
или
if (variable == null)
В Java, который будет более эффективным, и каковы различия?
if (null == variable)
или
if (variable == null)
(Аналогично этому вопросу: Разница между нулем == объект и объект == 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);
Никакой разницы.
if (variable == null)
является (imo) лучшим стилем программирования.
Обратите внимание, что null
является строчным в Java.
Это называется "Условия Yoda" , и целью является предотвращение случайного использования присваивания (=
) вместо проверки равенства (==
).
нет разницы
(null == variables)
иногда использовался в старые добрые времена (язык C)
чтобы избежать написания:
(variable = NULL)
по ошибке
Короткий ответ: никакой разницы.
Более длинный ответ: есть стилистическая разница, которая довольно субъективна. Некоторые люди утверждают, что константы должны быть слева как оборонительный стиль, на всякий случай, если вы ошибаетесь ==
в =
. Некоторые люди утверждают, что константы должны быть в порядке, потому что они более естественны и читабельны.
Хорошо разработанный язык в сочетании с хорошими инструментами компилятора и статического анализа, паранойя может быть сведена к минимуму, поэтому вы должны написать наиболее читаемый и естественный код, который будет константой справа.
Пожалуйста, используйте функцию поиска в следующий раз.
Первый - это зависание от C, где вполне законно писать if(variable = NULL)
От точки зрения производительности нет существенного различия.
Однако... что, если вы сделали опечатку и пропустили один символ равенства?
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);
Мое мнение: не заботятся о такой незначительной оптимизации производительности. Если у вас плохая производительность, найдите и задайте реальные проблемы/узкие места в вашем коде.
Нет никакой разницы.