diferença entre equals e ==

10 respostas
oxfish

Por que o primeiro é TRUE e o segundo é FALSE?

public static void main(String[] args) {
		String a = new String("TESTE");
		String b = new String("TESTE");
		
		System.out.println(a.equals(b));
		System.out.println(a==b);

	}

Obrigado.

10 Respostas

Rodrigo_Sasaki
E

== (em C# seria o ===) checa se 2 referências são iguais.
Como a e b referem-se a objetos diferentes (você chamou new 2 vezes, portanto há 2 objetos diferentes) então == vai retornar false.

oxfish

Valeu pessoal!

drsmachado

[ironic mode: on]
== != equals
[ironic mode: off]

E

Um compara referencia em memória e outro o objeto inteiro.

Rodrigo_Sasaki

Não é bem isso também.

O equals compara o que você quiser que ele compare, é importante frisar que o critério de comparação fica a critério do desenvolvedor. Vai depender da sua implementação, caso sobrescreva o equals.

Mas para ajudar, o equals possui um contrato que pode ser usado como base para se definir este critério.

E

Em Lisp há uma série de operadores que são conceitualmente equivalentes a == e equals.

Veja:

http://psg.com/~dlamkins/sl/chapter17.html

Em particular, (EQ x y) equivale a x == y, e (EQUAL x y) é mais ou menos o x.equals(y) (só que já vem pronto, em vez de você ter de escrevê-lo).

Rodrigo_Sasaki

entanglement:
Em Lisp há uma série de operadores que são conceitualmente equivalentes a == e equals.

Veja:

http://psg.com/~dlamkins/sl/chapter17.html

Em particular, (EQ x y) equivale a x == y, e (EQUAL x y) é mais ou menos o x.equals(y) (só que já vem pronto, em vez de você ter de escrevê-lo).


Li no link que você disse que ele considera como EQUAL aquilo que imprime da mesma maneira, porém não entendi o conceito, se não forem Strings, como isso pode ser definido?

E

É que em LISP a parte de impressão de estruturas de dados já está prontinha na linguagem - se você tem um hash, ou uma lista ligada (estrutura de dados default da linguagem), ou um array, eles são impressos (visualizados) de forma padronizada.

Rodrigo_Sasaki

Ah, entendi.

Realmente eu precisaria de uma base mais forte de LISP pra ter entendido, mas agora fez sentido.

Valeu!

Criado 3 de setembro de 2012
Ultima resposta 4 de set. de 2012
Respostas 10
Participantes 5