Мне задали этот вопрос в интервью. Какое из следующего лучше использовать
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).