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.
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.
== (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.
Valeu pessoal!
[ironic mode: on]
== != equals
[ironic mode: off]
Um compara referencia em memória e outro o objeto inteiro.
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.
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).
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).
É 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.
Ah, entendi.
Realmente eu precisaria de uma base mais forte de LISP pra ter entendido, mas agora fez sentido.
Valeu!