Вы находитесь на странице: 1из 4

1=C

2=A pois nao foi atribuido um valor inicial a i


3=D
4=E
5=B
6=abaixo
7=

6=Comparaes com o mtodo equals e com o operador ==


Resumindo antes para depois explicar....
equals --> Comparaes dentro do Heap da JVM
== --> Comparaes fora do Heap da JVM
O que o Heap?
O Heap um local reservado e protegido da JVM (Java Virtual Machine) onde ficam a
locados todos os objetos instanciados durante a execuo de seu programa... cada um
destes objetos possui um endereco de memoria onde est armazenado, e o unico acess
o a ele, por via de uma referencia (armazenada fora do heap).... Esta referencia
, tambm possui o endereco de memoria, tornando o seu acesso unico e exclusivo a e
ste objeto.

lembre-se que tipos primitivos (int, double, float) tambem ficam fora do HEAP co
m as referencias para objetos
**** Comparacao utilizando '==' ****
quando voce usa o operador "==" para comparar.... voce est comparando fora do hea
p
Entao.... no caso disso:
int a = 1;
int b = 1;
if (a == b) {
//instrucao
}
uma comparacao externa ao heap da jvm, ou seja, vai comparar os tipos primitivos
, ou seja, se o valor em 'a' eh o mesmo valor em 'b'...
resultando claro, em true
J no caso da comparacao de OBJETOS, utilizando o '==' ficaria desta forma:

MeuObjeto obj1 = new MeuObjeto("Java"<img src="http://javafree.uol.com.br/forum/


images/smiles/icon_wink.gif">;
MeuObjeto obj2 = new MeuObjeto("Free"<img src="http://javafree.uol.com.br/forum/
images/smiles/icon_wink.gif">;
if (obj1 == obj2) {
//instrucao
}
Ai voce est comparando os objetos fora do heap, ou seja, comparando apenas suas r
eferencias.......
Resultando na seguinte pergunta para a jvm em tempo de execucao:
"A referencia obj1 aponta para um objeto no Heap, e a referencia obj2 tambem apo
nta para um objeto no Heap, esses 2 objetos, SAO O MESMO OBJETO?"
Ai a jvm obviamente vai retornar false, pq cada um eh um objeto ("java" != "free
"...
agora no caso:
MeuObjeto obj1 = new MeuObjeto("Lucas"<img src="http://javafree.uol.com.br/forum
/images/smiles/icon_wink.gif">;
MeuObjeto obj2 = obj1;
O que eu fiz, foi instanciar um novo "MeuObjeto" (dentro do heap) e apontar obj1
(fora do heap) para ele.... depois criei uma nova referencia (fora do heap) cha
mada obj2, e apontei para obj1... ou seja... para o mesmo objeto.....
exemplo de que eh o mesmo objeto, se eu fizer:
System.out.println(

obj2.getNome()

);

provavelmente eu teria a saida: Lucas

Continuando com esse exemplo, se eu efetuasse a comparacao, ficaria assim:


if (ob1 == obj2) {
//instrucao
}
Ai sim, a saida seria true pois a referencia aponta para o mesmo objeto....
**** Comparacao utilizando 'equals'' ****
o _inverso_ da '==' compara os objetos dentro do heap, ou seja.... suas caracter
isticas...
um exemplo bsico e auto-explicativo seria.....

String nome1 = "Lucas";


String nome2 = "Jose";
if (nome1.equals(nome2)) {
//isntrucao
}
Ai sim, seria false, pois o VALOR das 2 sao diferentes...
Por isso que ideal quando criamos (minha opiniao) um novo objeto, do tipo por ex
emplo, PESSOA, sobrescrevermos o metodo 'equals' herdado de Object..... para pod
ermos ver se as pessoas sao iguais.....
exemplo bsico e tosco:
public class Pessoa extends Object implements Serializable {
private int idade;
private String nome;
public Pessoa() {
setIdade(0);
setNome("Alguem"<img src="http://javafree.uol.com.br/forum/images/smiles/i
con_wink.gif">;
}
public void setIdade(int i) {
if (idade < 0) throw new RuntimeException("Idade Negativa"<img src="http:/
/javafree.uol.com.br/forum/images/smiles/icon_wink.gif">;
else this.idade = i;
}
public void setNome(String n) {
//checo se a referencia para o nome existe...
if (n == null) throw new RuntimeException("Nome Invalido"<img src="http://
javafree.uol.com.br/forum/images/smiles/icon_wink.gif">;
else this.nome = n;
}
public String getNome() {
return nome;
}
public int getIdade() {
return idade;
}
public boolean equals(Pessoa p) {
boolean ret = false;
if (

(this.nome.equals(p.getNome())) && (this.idade == p.getIdade())

ret = true;
return ret;
}
}
O ideal seria tambm uma implementao do metodo hashcode, mas fica para a prxima....

Deu pra entender????


Abraos a todos do JF!

8= http://pt.slideshare.net/denistuning/java-02-27818176

devmedia

tipos primitivos
tem tamanho fixo. tem sempre valor defoult
armazenados na pilha
nao sao objetos. calasse "wrapper" faz transformaao, se necessario.
tipo=

boolean
char
byte
short
int
long
float
double
void

9= http://www.tiexpert.net/programacao/java/string.php
10= http://forum.clubedohardware.com.br/topic/628251-resolvido-qual-a-diferen%C3
%A7a-entre-for-e-while/
11= http://www.devmedia.com.br/conceitos-e-exemplos-do-switch-case-comandos-de-d
ecisao-estrutura-da-linguagem-parte-2/18816
12=

_________________

Вам также может понравиться