Anotações OCJP

Minhas anotações para o exame da Oracle (OCJP)

O incrível comportamento de uma String

Alguem já parou para pensar na mecânica engenhosa que é a criaçao de uma String?
Sim, é uma construção fabulosa, que nos permite criar objetos sem explicitar o comando new:

class str{
public static void main(String args[]){
String s = "abc"
}
}

O processo de criação de uma string como acima, passa pela instância de um objeto String, atribuição do valor a este objeto e referencia deste objeto ao atributo de instância chamado de s.
Até agora, nenhuma surpresa para quem conhece java, parecem apenas detalhes de uma operação normal, mas existem algumas comparações com Strings que merecem alguma atenção:

class str2{
public static void main(String args[]){
String nome = "Bruno";
String nome2 = "Bruno";
String nome3 = new String("Bruno");
System.out.println(nome==nome2);//1
System.out.println(nome2==nome3);//2
System.out.println(nome.equals(nome2));//3
System.out.println(nome2.equals(nome3));//4
nome = nome3;
System.out.println(nome==nome2);//5
System.out.println(nome==″Bruno");//6
System.out.println(nome.equals(nome3));//7
}
}

Antes de compilar este codigo na jvm, tente ser o compilador. Nas linhas numeradas com comentários, quais são os resultados?
Depois de parar para pensar, confira se as respostas condizem com o que está abaixo:

1. True. Quando a jvm cria as Strings literais, ela armazena a referência desses objetos e localiza essa referência caso haja a comparação destes literais. Por isso que esta comparação retorna true.(Mais detalhes em http://www.guj.com.br/articles/103).

2. False. A referência para os objetos de nome2 e nome3 é diferente, pois um objeto novo é instanciado por nome 3 e a sua referência não funciona como as Strings literais.

3. True. O valor de nome é igual ao de nome2.

4. True. O valor de nome2 é igual ao de nome3.

5. False. A referência de nome agora é para o nome3, logo não é igual a referencia de literal.

6. False. Mesma justificativa da 5.

7. True. Os valores dos objetos são iguais.

Logo podemos concluir que as questões de String não são questões difíceis mas sim questões que exigem de nossa atenção.
Então é isso, até a próxima!

Anúncios

2 Respostas para “O incrível comportamento de uma String

  1. Pingback: O incrível comportamento de uma String | JornalJava

  2. Pingback: JornalJava

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: