Você pode comparar com equals caso seu metodo esteja retornando um objeto:
Como aqui:
Long l = new Long(4);
Long l2 = new Long(4);
if(l.equals(l2)){
System.out.println("Igual");
}
oO o equals do Object so para String???
Na verdade não. Você pode usar o equals para outras class… você pode criar uma class qualquer
sobreescrever o metodo Equals e criar uma logica para comparar seu objeto.
[code]
Integer a = 5000;
Integer b = 5000;
System.out.println(a == b);
Integer c = 5;
Integer d = 5;
System.out.println(c == d);[/code]
No primeiro sai false, e no segundo sai true. Traduzindo, não use == para comparar objetos quando o objetivo é ver se eles são equivalentes. Para isso voce deve usar equals. == compara se eles tem a mesma referencia, com algumas exceções como pode ser vista no exemplo acima.
Você pode comparar com equals caso seu metodo esteja retornando um objeto:
Como aqui:
Long l = new Long(4);
Long l2 = new Long(4);
if(l.equals(l2)){
System.out.println("Igual");
}
oO o equals do Object so para String???
Na verdade não. Você pode usar o equals para outras class… você pode criar uma class qualquer
sobreescrever o metodo Equals e criar uma logica para comparar seu objeto
[/quote]
Ok, mas para que criar uma classe para comparar um tipo primitivo?
Vou reformular minha resposta. equals, para comparar objetos, == para tipos primitivos.
Utilize o código abaixo (1), pois ele é protegido contra NullPointerException. Ao contrário do código (2) que irá lançar NullPointerException caso getId() seja nulo.
Dessa forma vc também gera um objeto intermediário para um campo como o Id, que não deveria ser Null.
Agora, na verdade, uma comparação dessa tem uma diferença de desempenho tão insignificante nos dois casos, que você deve preferir a que te der menos trabalho para codificar.
Dessa forma vc também gera um objeto intermediário para um campo como o Id, que não deveria ser Null.
Agora, na verdade, uma comparação dessa tem uma diferença de desempenho tão insignificante nos dois casos, que você deve preferir a que te der menos trabalho para codificar.[/quote]
Como você disse a diferença de desempenho tão insignificante que eu prefiro a primeira forma para todos os casos seja um ID ou não.
Integer.valueOf(1).equals(usuario.getId());
No caso acima nem o objeto intermediário é criado pois ele já existe no cache do Integer.
Na prática, vc não vai comprar com uma valor literal. Ao invés de 1L, você usará uma variável, ou seja, usará o cache do Integer se esse valor estiver numa faixa específica. O que, dependendo do banco, pode ser raríssimo. Portanto, haveria geração do objeto intermediário.
De qualquer forma, eu prefiro não ficar “protegendo contra NullPointerException” de maneira implícita. Isso pode mascarar erros, embora também o hábito impeça de gera-los em alguns casos. Mas isso é questão de gosto, e novamente não está associado a performance.
Como já falamos, não tem muita diferença de performance aqui.
Sobre a comparação entre equals ou == entre Numbers, se bem me lembro, tem uma curiosidade sobre isso que é o seguinte: se você tentar comparar um Integer (ou Long, whatever) com == que tiver um valor até 127, da true, acima disso, mesmo que o valor seja igual, dará false. Exemplificando:
Talvez por utilizar um pool que seja comum a todos os filhos da classe Number (Byte é o menor, acho). Algo parecido com o pool de Strings.
Denovo: para comparação de objetos, use equals :lol:
Sobre a comparação entre equals ou == entre Numbers, se bem me lembro, tem uma curiosidade sobre isso que é o seguinte: se você tentar comparar um Integer (ou Long, whatever) com == que tiver um valor até 127, da true, acima disso, mesmo que o valor seja igual, dará false. Exemplificando:
Talvez por utilizar um pool que seja comum a todos os filhos da classe Number (Byte é o menor, acho). Algo parecido com o pool de Strings.
Denovo: para comparação de objetos, use equals :lol:
Abraços[/quote]
:lol: :lol: :lol: :lol: :lol: :lol:
Meoooo, esse tópico salvou minha pele!
Estava comparando números e o if não estava funcionando mesmo quando eram iguais.
Qse arranquei os cabelos!
rsrs
Poww, valewww mesmo hein…
Curiosidade interessantíssima!