2011-07-30 15 views
33

Mi jefe dijo que debería usar null == obj, porque es mejor que obj == null, pero no recordaba por qué hacer esto. ¿Hay alguna razón para usar null == obj?
Lo siento de alguna manera ... ¡al revés!(obj == null) vs (null == obj)?

Después de algún búsqueda en Google, lo único que he encontrado es:

en C, que le impide accidentalmente de escribir (obj = null) en una estructura condicional.

+7

La única cosa que era consciente de lo que es encontrado en Google. Probablemente este sea tu jefe condicionado por la programación C. Dicho eso, no pelearía contra eso. – Patrick87

+2

Creo que esta idea es una retención de C. –

+2

Definitivamente una cosa de C. No lo buscaría personalmente, ya que se lee completamente al revés. –

Respuesta

31

No se puede asignar accidentalmente null a obj escribiendo obj = null lugar. Sin embargo, eso es una reminiscencia de C veces, en Java, no es posible, ya que la expresión = devuelve el lado derecho de la tarea. Como null no es boolean, el compilador se quejará.

Intentaré explicárselo a mi jefe una vez, demuéstralo. Si él todavía no está de acuerdo contigo, solo hazlo. Es algo insignificante para pelear con tu jefe.

+10

En general, esta afirmación es verdadera, pero con una excepción: si 'obj' es un' Boolean', entonces 'if (obj = null)' no desencadenará un error del compilador –

+0

En el resultado de Google, él (ella) explicó: 'En C es posible escribir if (obj = null). . . por error (cuando intentó escribir == nulo) y obtiene dos errores por el precio de uno: La referencia del objeto se establece en nulo La condición después de que if se convierte en falso implícitamente' –

+0

@a_horse_with_no_name: Boolean es un tipo de objeto , no se puede establecer como nulo – Dani

11

En Java, no hay diferencia.

Prefiero (obj == null) ya que se siente más natural.

+0

Realmente no es una respuesta, debe hacer un comentario la próxima vez. –

+1

@XcodeDev, es una cuestión bastante simple en justicia, a menos que se requiera una carga de información tangencial sobre los detalles del compilador. –

+4

@XcodeDev: es una respuesta perfecta. Especialmente considerando que toda la pregunta era "(obj == null) vs (null == obj)?", Que tiene un alcance bastante vago. –

1

Nunca he oído hablar de esto antes, pero parece que el razonamiento que dio es sólido. También creo que se siente al revés, pero no debería tener ningún otro problema que no sea "sentirse" mal. No creo que tenga ningún beneficio de rendimiento ni nada de eso.

1

Si pasa una condición como if (obj=null) o if (null=obj) en los IDE actuales de Java, lo resaltará como un error de sintaxis. Además, intentar compilar indicará el error.

Ambos (obj==null) y (null==obj) son aceptables, ambos llevan la misma sobrecarga, los posteriores no rinden ningún tipo de rendimiento. La decisión de usar cualquiera de ellos depende del estilo de código adoptado para mantener un estilo uniforme en todas las clases.

10

Si compila su archivo con if(null==obj), el código de bytes generada es if_acmpne y en caso de if(obj==null) es ifnonnull. Ahora en if_acmpne, dos operandos salen de la pila y se comprueba que no son iguales (en este caso null y obj), y en ifnonnull, solo se visualiza un operando y se comprueba si no es nulo. A partir de esto, parece que ifnonnull es mejor, ya que implica hacer estallar solo un operando.

Referencias: http://www.artima.com/underthehood/flowP.html