Который имеет лучшую производительность: test!= Null или null!= Test

Рассмотрим следующие две строки кода

if (test ! = null)

и

if (null != test)

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

Ответы

Ответ 1

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

Второй - это просто потому, что C/С++, где программисты всегда выполняли назначение вместо сравнения.

например.

// no compiler complaint at all for C/C++
// while in Java, this is illegal.
if(a = 2) {
}
// this is illegal in C/C++
// and thus become best practice, from C/C++ which is not applicable to Java at all.
if(2 = a) {
}

Пока компилятор java генерирует ошибку компиляции.

Поэтому я лично предпочитаю первый из-за читаемости, люди склонны читать слева направо, которые читаются как if test is not equal to null вместо null is not equal to test.

Ответ 2

Они точно такие же. Второй может иметь смысл при использовании equals:

if("bla".equals(test))

никогда не может бросать NullPointerException, тогда как:

if(test.equals("bla")) 

может.

Ответ 3

Нет разницы в производительности, но я лично считаю, что вторая запуталась.

Ответ 4

Второй выглядит для меня как "условие Йоды", т.е. if(2 == x) ... и гораздо менее удобочитаемо.

Ответ 5

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

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

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

Ответ 6

нет разницы. Но во втором случае вы избегаете опечатки типа test = null. Beacause во втором случае вы получите ошибку компилятора.

Ответ 7

Не лучше использовать последний. Оба эквивалентны, но первое легче читать.

Эта "лучшая практика" исходит от C, где логическое не существует. Вместо них используются целые числа, а if (foo = 1) не является синтаксической ошибкой, но полностью отличается от if (foo == 1).

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

Ответ 8

Между двумя формами нет разницы. Нет проблемы с производительностью, но есть следующие примечания:

  • Первая форма читается для чтения кода, потому что люди обычно читают коды Left-To-Right.
  • Вторая форма лучше для писателя кода, потому что в java = оператор предназначен для назначения, а оператор == для тестового эквивалента, но люди обычно используют в выражении if = вместо ==, по второй разработчик, получающий Compile-Time-Error, потому что null не может использовать в Left-Side оператора присваивания.