Есть ли разница между (null!= x) и (x!= null)

Я смотрел видеоурок по программированию на Java, и в нем упоминалось, что:

if(null != x){
}

это хорошая практика, чтобы использовать его, как указано выше?

Отличается ли он от:

if(x != null){
}

person Adham    schedule 06.11.2014    source источник
comment
Без разницы, я обнаружил, что if (x != null) встречается чаще.   -  person ryanpattison    schedule 07.11.2014
comment
@rpattiso я тоже, поэтому я и спрашиваю, профессор из известного университета использовал первый   -  person Adham    schedule 07.11.2014
comment
Некоторые люди предпочитают сначала ставить null, а в случае опечатки — null = x. Но сравнение дает те же результаты.   -  person AntonH    schedule 07.11.2014
comment
@AntonH правда, но это проблема C, а не Java, верно?   -  person ryanpattison    schedule 07.11.2014
comment
Многие разработчики C склонны использовать null !=, я предпочитаю первое. При использовании equals я ищу в основном не null значение, например "Test String".equals(someStringVariable), но это другой случай...   -  person MadProgrammer    schedule 07.11.2014
comment
@rpattiso Нет, вы можете выполнять присваивания в операторах if, как в C   -  person MadProgrammer    schedule 07.11.2014
comment
@rpattiso Нет, это может произойти и на Java. Вы просто присваиваете в скобках.   -  person AntonH    schedule 07.11.2014
comment
Вы также можете обнаружить, что это связано с тем, как люди думают, что x не равен нулю? переводится как x != null...   -  person MadProgrammer    schedule 07.11.2014
comment
В случае == if (null == x) предотвращает случайное назначение null на x в случае опечатки, например if (x=null). Но в случае != эта ошибка не может быть допущена, поэтому вы вольны выбирать любой способ (но если вы начнете использовать null == x, вам, вероятно, следует также использовать null != x).   -  person Pshemo    schedule 07.11.2014
comment
@MadProgrammer Верно, но в большинстве случаев он не компилируется, потому что выражение присваивания имеет нелогический тип. В C эта опечатка всегда приводит к правильному коду.   -  person ryanpattison    schedule 07.11.2014
comment
@AntonH Это может случиться, но маловероятно. if (x = null) допустимо только, если x является Boolean (с заглавной буквой B). В противном случае либо тип выражения не был бы логическим, либо null нельзя было бы присвоить x.   -  person ajb    schedule 07.11.2014
comment
@rpattiso Если x является Object, что должно быть, чтобы быть оцененным как null, тогда if (x = null) является допустимым заданием, if (null = x) не может работать ... или я упускаю смысл?   -  person MadProgrammer    schedule 07.11.2014
comment
@ajb Разве x не должен быть только тип Object? Какой смысл пытаться оценить boolean до null?   -  person MadProgrammer    schedule 07.11.2014
comment
@MadProgrammer Результат выражения присваивания соответствует типу переменной, Boolean x; if(x = null); является допустимым, но String x; if (x = null); не является допустимым для Java, поскольку результат x = null не является логическим типом.   -  person ryanpattison    schedule 07.11.2014
comment
@rpattiso Присвоение допустимо, а оценка - нет, if ((x = null) != null) будет работать, но да, это хороший улов со стороны компилятора;)   -  person MadProgrammer    schedule 07.11.2014
comment
@MadProgrammer Если x является Object, тип x = null также является Object. И вы не можете использовать Object в качестве условия оператора if. Мы все еще говорим о Java, верно?   -  person ajb    schedule 07.11.2014
comment
@ajb Да, но задание может работать, но не оценка. Может быть сложное условие, при котором происходит присваивание (случайно), за которым следует оценка, позволяющая оператору if работать, но теперь ваша точка зрения яснее;)   -  person MadProgrammer    schedule 07.11.2014
comment
@MadProgrammer Я не уверен, что это за сложное условие ... Java тоже не разрешает x=null && y==null. Я думаю, что количество случаев, когда вы можете заменить == на = в выражении, и оба варианта будут допустимыми, довольно мало. Хотя хотелось бы ноль.   -  person ajb    schedule 07.11.2014
comment
@ajb if ((a = b) != null) ... да, это странно, но выполнимо ;) - Но ваш предыдущий комментарий прояснил мое замешательство, ура ;)   -  person MadProgrammer    schedule 07.11.2014
comment
@MadProgrammer Я говорил о случаях, когда = можно было (случайно) поменять местами с ==, а if ((a == b) != null) в любом случае не кажется законным.   -  person ajb    schedule 07.11.2014
comment
@ajb Правда, это должно быть !(a==b)... хм. Тем не менее, воздух прояснился ;)   -  person MadProgrammer    schedule 07.11.2014


Ответы (2)


Вы собираетесь хотеть использовать второй.

Оба делают одно и то же... сравните A с B или сравните B с A - оба означают одно и то же.

Просто имеет больше смысла использовать x != null, потому что это больше похоже на то, как мы бы это сказали.

Вы могли бы спросить меня: «Разве x не равен нулю?» Это кажется более естественным, чем "Разве null не x?" Это имеет больше смысла для нас.

person Alex K    schedule 06.11.2014

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

person Harry    schedule 06.11.2014