Который имеет лучшую производительность: 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
оператора присваивания.