Мне задали этот вопрос в интервью. Какое из следующего лучше использовать
MyInput.equals("Something");
или
"Something".equals(MyInput);
Спасибо
Мне задали этот вопрос в интервью. Какое из следующего лучше использовать
MyInput.equals("Something");
или
"Something".equals(MyInput);
Спасибо
Я пошел бы за
"Something".equals(MyInput);
в этом случае, если MyInput равен null
, тогда он не будет бросать NullPointerException
Здесь мы уверены, что объект, на который будет вызываться equals()
, будет NOT NULL
.
И если вы ожидаете NullPointerException
от своего кода, чтобы принять какое-то решение или бросить/обернуть его, то сначала зайдите.
Эффективность не влияет
Быть противоположным....:)
Первая строка может произойти сбой, если MyInput имеет значение null, но это просто программисты с удобством для кода (обычно с похмелья C), когда они не хотят утверждать, что "MyInput" может быть нулевым.
Если используется второй параметр, возможно, эта строка не вызовет исключение NullPointerException, но следующие строки могут быть.
Я считаю, что лучше знать возможное состояние ваших переменных, а не полагаться на некоторую конструкцию кода, которая облегчает вашу совесть.
Первый будет поднимать NullPointerException
, если MyInput
есть null
, а последний вернет false
, поэтому последнее может быть предпочтительным в некоторых случаях (или, возможно, первым, если вы не ожидайте, что MyInput будет нулевым и захочет быстро выйти из строя).
Если вы хотите быть настоящими штанами-умницами, вы можете указать, что MyInput
может быть специальным подклассом String, который перегружает методы equals
и hashcode
. В этом случае упорядочение заявления жизненно важно.
Вот пример реальной жизни - как насчет того, хотите ли вы сравнить строки, в которых есть числа, и вы хотите игнорировать ведущие нули? Например, Lecture1
будет равно Lecture01
.
Хорошо, как насчет того, чтобы весь наш код перевернулся для изменения?
Те, кому сначала нравятся их константы, как они будут себя чувствовать, когда видят это?
if ( 2 == i)
Скрытие исключения NullPointerException, на мой взгляд, никогда не является преимуществом, но является недостатком в дизайне.
Если вы никогда не ожидаете исключение NullPointerException, но получили его, то вам нужно упустить ваше приложение, следить за журналами и узнать, почему это произошло. Это может быть бизнес-кейс, который вы пропустили совсем:)
Если вы опционально ожидаете нулевой параметр и не хотите обрабатывать его отдельно, используйте утилитный метод, например StringUtils.equals(...)
Тем не менее, я никогда не позволяю кому-либо из членов моей команды использовать вторую форму, потому что она не является последовательной и нечитаемой.
я бы пошел на "что-то".equals(myInput); потому что переменная может быть нулевой, просто она генерирует исключение, если переменная имеет значение null.
Хороший разработчик всегда будет стараться избегать NullPointerException
, поэтому лучшим ответом будет использование "Something".equals(myInput)
.