Qual é mais efetivo: if (null == variable) ou if (variable == null)?

Em Java, o que será mais eficaz e quais são as diferenças?

if (null == variable) 

ou

 if (variable == null) 

(Semelhante a esta questão: Diferença entre null == object e object == null )

Eu diria que não há absolutamente nenhuma diferença no desempenho entre essas duas expressões.

Curiosamente, no entanto, o bytecode compilado (como emitido pelo Suns javac) parece um pouco diferente para os dois casos.

Para boolean b = variable == null :

  3: aload_1 // load variable 4: ifnonnull 11 // check if it's null 7: iconst_1 // push 1 8: goto 12 11: iconst_0 // push 0 12: istore_2 // store 

Para boolean b = null == variable :

  3: aconst_null // push null 4: aload_1 // load variable 5: if_acmpne 12 // check if equal 8: iconst_1 // push 1 9: goto 13 12: iconst_0 // push 0 13: istore_2 // store 

Como diz @Bozho, a variable == null é o estilo padrão e preferido mais comum.

Para certas situações, no entanto, eu costumo colocar o null na frente. Por exemplo, no seguinte caso:

 String line; while (null != (line = reader.readLine())) process(line); 

Isso é chamado de “Condições Yoda” e o objective é evitar que você use acidentalmente atribuição ( = ) em vez de verificação de igualdade ( == ).

Nenhuma diferença

if (variable == null) é (imo) um melhor estilo de programação.

Note que null é minúsculo em Java.

sem diferença

(null == variables) às vezes era usado em bons tempos antigos (linguagem C) para evitar escrever: (variable = NULL) por engano

Resposta curta: sem diferença.

Resposta mais longa: existe uma diferença estilística que é bastante subjetiva. Algumas pessoas argumentam que constantes devem estar na esquerda como um estilo defensivo caso você tenha typescript errado == em = . Algumas pessoas argumentam que as constantes devem estar certas porque são mais naturais e legíveis.

Uma linguagem bem projetada combinada com um bom compilador e ferramentas de análise estática, a paranoia pode ser minimizada, então você deve escrever o código mais legível e natural, que seria a constante à direita.

Perguntas relacionadas

Por favor, use a function de pesquisa na próxima vez.

  • Diferença entre null == object e object == null
  • qual é a diferença entre null! = object e object! = null
  • qual caminho é melhor “nulo! = object” ou “object! = nulo”?
  • Por que muitas vezes vemos “null! = Variable” em vez de “variável! = Null” em c #?
  • ‘…! = Null’ ou ‘null! =…’ Melhor desempenho?

O primeiro é um hang over de C, onde é perfeitamente legal escrever if(variable = NULL)

Não há diferença material de uma perspectiva de desempenho.

No entanto … e se você fez um erro de digitação e perdeu um único caractere igual?

 foo = null; // assigns foo to null at runtime... BAD! 

versus

 null = foo; // compile time error, typo immediately caught in editor, developer gets 8 hours of sleep 

Este é um argumento a favor de iniciar um teste if com null no lado esquerdo.

O segundo argumento a favor do início de um teste if com null é que ficou muito claro para o leitor do código que eles estão olhando para um teste nulo, mesmo quando a expressão à direita do sinal de igual é detalhada.

@aiooba também aponta este segundo argumento:

Para certas situações, no entanto, eu costumo colocar o nulo na frente. Por exemplo, no seguinte caso:

 String line; while (null != (line = reader.readLine())) process(line); 

Minha opinião: Não me importo com essas otimizações de desempenho insignificantes. Se você tiver desempenho ruim, localize e segmente os problemas / gargalos reais em seu código.

Não há diferença alguma