Подтвердить что ты не робот

Интервью: Java Equals

Мне задали этот вопрос в интервью. Какое из следующего лучше использовать

 MyInput.equals("Something");   

или

"Something".equals(MyInput);

Спасибо

4b9b3361

Ответ 1

Я пошел бы за

"Something".equals(MyInput);

в этом случае, если MyInput равен null, тогда он не будет бросать NullPointerException

Здесь мы уверены, что объект, на который будет вызываться equals(), будет NOT NULL.

И если вы ожидаете NullPointerException от своего кода, чтобы принять какое-то решение или бросить/обернуть его, то сначала зайдите.

Эффективность не влияет

Ответ 2

Быть противоположным....:)

Первая строка может произойти сбой, если MyInput имеет значение null, но это просто программисты с удобством для кода (обычно с похмелья C), когда они не хотят утверждать, что "MyInput" может быть нулевым.

Если используется второй параметр, возможно, эта строка не вызовет исключение NullPointerException, но следующие строки могут быть.

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

Ответ 3

Первый будет поднимать NullPointerException, если MyInput есть null, а последний вернет false, поэтому последнее может быть предпочтительным в некоторых случаях (или, возможно, первым, если вы не ожидайте, что MyInput будет нулевым и захочет быстро выйти из строя).

Ответ 4

Если вы хотите быть настоящими штанами-умницами, вы можете указать, что MyInput может быть специальным подклассом String, который перегружает методы equals и hashcode. В этом случае упорядочение заявления жизненно важно.

Вот пример реальной жизни - как насчет того, хотите ли вы сравнить строки, в которых есть числа, и вы хотите игнорировать ведущие нули? Например, Lecture1 будет равно Lecture01.

Ответ 5

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

Те, кому сначала нравятся их константы, как они будут себя чувствовать, когда видят это?

if ( 2 == i) 

Скрытие исключения NullPointerException, на мой взгляд, никогда не является преимуществом, но является недостатком в дизайне.

Если вы никогда не ожидаете исключение NullPointerException, но получили его, то вам нужно упустить ваше приложение, следить за журналами и узнать, почему это произошло. Это может быть бизнес-кейс, который вы пропустили совсем:)

Если вы опционально ожидаете нулевой параметр и не хотите обрабатывать его отдельно, используйте утилитный метод, например StringUtils.equals(...)

Тем не менее, я никогда не позволяю кому-либо из членов моей команды использовать вторую форму, потому что она не является последовательной и нечитаемой.

Ответ 6

я бы пошел на "что-то".equals(myInput); потому что переменная может быть нулевой, просто она генерирует исключение, если переменная имеет значение null.

Ответ 7

Хороший разработчик всегда будет стараться избегать NullPointerException, поэтому лучшим ответом будет использование "Something".equals(myInput).