Entrevista: Java Equals

Me hicieron esta pregunta en una entrevista. ¿Cuál de los siguientes es mejor usar?

MyInput.equals("Something"); 

O

 "Something".equals(MyInput); 

Gracias

Yo iría por

 "Something".equals(MyInput); 

en este caso, si MyInput es null , no lanzará NullPointerException

Aquí estamos seguros de que el objeto sobre el cual equals() va a invocar NOT NULL .

Y si espera que NullPointerException de su código tome alguna decisión o lance / ajuste, vaya primero.

No hay impacto en el rendimiento

Para ser el contrario … 🙂

La primera línea puede fallar si MyInput es nulo, pero eso es solo un progtwig de conveniencia de código (generalmente con resaca de C) cuando no quieren afirmar que ‘MyInput’ puede ser nulo.

Si se usa la segunda opción, entonces tal vez esta línea no cause una NullPointerException, pero las siguientes líneas podrían serlo.

Creo que es mejor conocer el posible estado de sus variables en lugar de confiar en alguna construcción de código que alivie su conciencia.

El primero elevará una NullPointerException si MyInput es null , mientras que el último solo devolverá false , por lo que este último puede ser preferible en ciertos casos (o posiblemente el primero, si no espera que MyInput sea nulo y quiera fallar rápidamente) .

Bueno, ¿qué tal si escribimos todo el código al revés para variar?

Aquellos a los que les gustan sus constantes primero, ¿cómo se sentirían cuando vean esto?

 if ( 2 == i) 

Ocultar una NullPointerException, en mi opinión, nunca es un beneficio sino una falla en el diseño.

Si nunca esperas una NullPointerException pero tienes una, entonces debes dejar que tu aplicación explote, seguir los registros y ver por qué sucedió esto. Podría ser un caso de negocios que te perdiste por completo 🙂

Si espera un parámetro nulo y no está interesado en manejarlo por separado, use un método de utilidad como StringUtils.equals (…)

Dicho esto, nunca permití que ninguno de los miembros de mi equipo utilizara el segundo formulario porque no es coherente y no es legible.

Si quieres ser un verdadero sabelotodo, podrías señalar la posibilidad de que MyInput sea ​​una subclase especial de String que ha hashcode métodos hashcode y hashcode . En ese caso, el orden de la statement es de vital importancia.

Aquí hay un ejemplo de la vida real: ¿qué tal si quieres comparar Cuerdas que tienen números en ellas y quieres ignorar los ceros a la izquierda? Por ejemplo, Lecture1 equivaldría a Lecture01 .

iría a “algo” .equals (myInput); porque la variable puede ser nula simplemente arroja una excepción si la variable es nula.

Un buen desarrollador siempre intentará evitar una NullPointerException , por lo tanto, la mejor respuesta sería usar "Something".equals(myInput) .