2017-02-18 3 views
-1

Я видел во многих местах, что сначала используется постоянное значение, а затем переменная, например, («ram»). Равна (a) и во многих местах я видел, что переменная используется сначала, а затем константа значение, с которым они хотят сравнить, например, a.equals ("ram").Разница между использованием переменной first и использованием переменной в конце при сравнении объекта?

В чем разница между a.equals ("ram") и ("ram"). Equals (a)? Какой лучше использовать и почему?

+0

'" ram ".equals (a)' (не уверен, почему у вас есть скобки) является «лучше» тем, что он не будет бросать NPE, это 'a' is' null'. –

+0

Этот вопрос задавался снова и снова (например [здесь] (http://stackoverflow.com/questions/5712100/interview-java-equals)). Пожалуйста, сначала исследуйте. – Seelenvirtuose

+0

a.equals ("ram") может вызывать исключение NullPointerException. –

ответ

0

(«ram»). Равен (a) лучше. Код никогда не сломается, даже если a равно null. избавляет нас от исключения из-за нулевого указателя.

+3

Но это также скроет исключение, которое должно быть выбрано, если a не должно быть null. –

+1

Он также читает неестественно, что препятствует поддержанию. Предпосылка о том, что лучше избегать проверки «null», явно не верна, и респонденты здесь дали инженерные причины, почему это неверно. В противном случае аргументы в пользу обратной идиомы основаны на эмоциях, а не на логике. Я не буду одобрять ни одну из форм в этом комментарии, только прошу, чтобы мы основывали наше решение на логике. –

3

Первый стиль более безопасен в ситуациях, когда переменной a разрешено быть null, поскольку вы можете пропустить проверку null.

Когда вы пишете

if (a.equals("ram")) { ... } 

вы должны убедиться, что a не null, чтобы избежать исключения нулевого указателя. Это не является необходимым для

if ("ram".equals(a)) { ... } 

, потому что equals() метод требуется обрабатывать null аргументы не бросать исключение:

Для любого ненулевого опорного значения x, x.equals(null) должен возвращать false.

Смежные вопросы