Eu não entendi quando devo usar == ou quando devo usar equals()?
tá falando sério? com mais de 100 mensagens, várias no java avançado…
bom
façaa
String a = “Brasil”;
String b = “Brasil”;
depois faça
if (a == b) e veja o resultado.
== é para tipos primitivos apenas. String em java é objeto
o == pode até funcionar, mas sér apenas sorte sua.
[quote=“leomc”]tá falando sério? com mais de 100 mensagens, várias no java avançado…
bom
façaa
String a = “Brasil”;
String b = “Brasil”;
depois faça
if (a == b) e veja o resultado.
== é para tipos primitivos apenas. String em java é objeto
o == pode até funcionar, mas sér apenas sorte sua.[/quote]
Ainda não entendi muito bem, eu li agora em um lugar aki que usamos == para comparar de dois primitivos apontam para o mesmo objeto e o equals() usamos para saber se o conteúdo de dois objetos forem iguais…
e qual a sua dúvida agora?
Na moral, eu ainda não consigo ver diferença entre os dois, se eu fizesse a prova do exame agora eu me borava todo nessa parte
a == b compara se a e b apontam para mesma área de memória, se o conteúdo de ambos for “abc” e, no entanto, forem pontos diferentes de memória não será igual.
a.equals(b) compara o conteúdo de a com o conteúdo de b, se ambas forem “abc” será igual.
Na moral, eu ainda não consigo ver diferença entre os dois, se eu fizesse a prova do exame agora eu me borava todo nessa parte[/quote]
Ir fazer a prova sem saber isso é dose hein! Compra um livro e estuda!
[quote=“Ping”][quote=“leomc”]tá falando sério? com mais de 100 mensagens, várias no java avançado…
bom
façaa
String a = “Brasil”;
String b = “Brasil”;
depois faça
if (a == b) e veja o resultado.
== é para tipos primitivos apenas. String em java é objeto
o == pode até funcionar, mas sér apenas sorte sua.[/quote]
Ainda não entendi muito bem, eu li agora em um lugar aki que usamos == para comparar de dois primitivos apontam para o mesmo objeto e o equals() usamos para saber se o conteúdo de dois objetos forem iguais…[/quote]
heheh… vc sabe a resposta a tá com duvida…
essa eh no minimo engraçada… :lol:
Na moral, eu ainda não consigo ver diferença entre os dois, se eu fizesse a prova do exame agora eu me borava todo nessa parte[/quote]
Ir fazer a prova sem saber isso é dose hein! Compra um livro e estuda! [/quote]
Eu acho que é final do dia e eu já não estou conseguindo raciocinar direito, não consegui entender essa história de apontar para a mesma área de memória, então seria melhor usar equals() sempre…
No caso de Strings às vezes a == b é o mesmo que a.equals(b) por economia de memória, mas o certo é usar a.equals(a). Com Strings passadas como parâmetro acho que isso não funciona.
Na moral, eu ainda não consigo ver diferença entre os dois, se eu fizesse a prova do exame agora eu me borava todo nessa parte[/quote]
Ir fazer a prova sem saber isso é dose hein! Compra um livro e estuda! [/quote]
Eu acho que é final do dia e eu já não estou conseguindo raciocinar direito, não consegui entender essa história de apontar para a mesma área de memória, então seria melhor usar equals() sempre…[/quote]
hehe… pelo jeito tá lesado ainda…
mas depende… se quer olha conteudo sim… se quer ver se duas referencias aponta pro msm objeto use == … agora caso esteja usando tipos primitivos… ai se vc só pode usar ==
Veja assim:
“==” compara objetos
"equals" compara valores (conteúdo)
EX:
String a = “abc”;
String b =a;
String c = new String();
c = a;
‘a’ é igual a ‘b’, ou seja, aponta para o mesmo local na memória.
‘c’ != ‘b’ e ‘a’, porém ter o mesmo valor das demais variáveis.
public class Excompara {
String a = "abc";
String b =a;
String c = new String();
public Excompara() {
c=a;
System.out.println("'a' e 'b' sao o mesmo objeto? "+a==b);
System.out.println("'a' e 'b' tem o mesmo valor? "+a.equals(b));
System.out.println("'a' e 'c' sao o mesmo objeto? "+a==c);
System.out.println("'a' e 'c' tem o mesmo valor? "+c.equals(a));
}
public static void main(String[] args) {
new Excompara();
}
}
Explicar equals versus == usando Strings como exemplo eh uma pessima ideia, por causa do mecanismo de intern()'ing da VM, desenvolvido pra dar uma aumentada na performance e diminuir o consumo de memoria.
Como assim cv? Gostaria de saber mais, por que causa essa latência? :lol:
== :Verifica se duas variaveis de referencia está referenciando o Mesmo Objeto no Heap…se refrerenciar retorna true. quando utilizada em primitivos,verifica se as variaveis sao do mesmo tipo e se contem os mesmos valores…
Sao consideradas iguais por economia de memoria se seus valores primitivos forem os mesmos:
:idea: Boolean
:idea: Byte
:idea: Character
:idea: Short e Interger de -128 até 127
se os inteiros passarem desse intervalo de valores…serao consigerados diferente por ==
equals() :Verifica se duas variaveis estao referenciando objetos que tem os memsos valores…no heap
public static void main(String[] args) {
String s=new String(“abc”); //um objeto com valor "abc"
String b=new String(“abc”); //outro objeto com valor "abc"
String ss=“abc”; //outro objeto com valor “abc” …porem diferente do criado anterior…
String bb=“abc”; //outro objeto com valor “abc” …porem igual ao anterior…
String c=s;// apontando “c” para o objeto que “s” aponta…
if(s==b){ //‘s’ e ‘b’ apesar dos mesmos valores…sao objetos diferentes no heap…retorna false
System.out.println(“s == b”);
}
if(s.equals(b)){ //‘s’ e ‘b’ apesar de ser objetos diferentes contem o mesmo valor
System.out.println(“s.equal(b)”);
}
if(ss==bb){ // 'ss' e 'bb' está apontando para o mesmo objeto no heap e contem os mesmo valores..retorna true
System.out.println("ss == bb");
}
if(ss.equals(bb)){
System.out.println("ss.equal(bb)");//retorna true..tambem
}
if(c==s){ //como 'c' esta recebendo a referencia de 's' que aponta para o objeto string..entao sao iguais..retorna true..
System.out.println("c == s");
}
if(c.equals(s)){
System.out.println("c.equal(s)");//true
}}}
resultado:
s.equal(b)
ss == bb
ss.equal(bb)
c == s
c.equal(s)