PEssoal, executando o código abaixo:
public static void main(String[] args) {
Item item = new Item();
Item item2 = new Item();
String st1 = new String();
String st2 = new String();
item.setProp("testeAbc");
item2.setProp("teste2");
item = item2;
item.setProp("alterado");
System.out.println(item.getProp() + " " + item2.getProp());
st1 = "teste";
st2 = "teste2";
st2 = st1;
st2 = "teste3";
System.out.println(st1 + " " + st2);
}
É obtida a seguinte saída:
alterado alterado
teste teste3
Andei pesquisando e vi que ao “igualar” os objetos o java não faz uma cópia do mesmo, apenas associa a referencia de memória, fazendo com que os dois objetos passassem a ser um só, porque ao alterar um o outro é alterado, como visto na execução.
Minha dúvida é por quê nas Strings isso não ocorre, ou seja, os objetos continuam apontando para referências diferentes de memória.
Obrigado.
É exatamente a mesma coisa! Você precisa observar apenas que cada literal String como “Oi mundo” ou “String em Java” é um objeto. Sendo assim, ao fazer a atribuição
String str1 = new String();
str1 = "teste";
você está apontando str1 para um novo objeto, ao invés de definir o valor interno da String criada com new na 1a linha.
[quote=rmendes08]É exatamente a mesma coisa! Você precisa observar apenas que cada literal String como “Oi mundo” ou “String em Java” é um objeto. Sendo assim, ao fazer a atribuição
String str1 = new String();
str1 = "teste";
você está apontando str1 para um novo objeto, ao invés de definir o valor interno da String criada com new na 1a linha. [/quote]
Certo, apenas para eu entender bem entao (não consigo testar agora o código, mas testarei mais tarde).
Se ao invés de String eu estivesse usando StringBuilder, com append e setLength o resultado seria o mesmo obtido nos objetos do tipo Item, ou seja, os dois objetos apontando para a mesma referência, certo?
Obrigado pela resposta.
[quote=jks1903][quote=rmendes08]É exatamente a mesma coisa! Você precisa observar apenas que cada literal String como “Oi mundo” ou “String em Java” é um objeto. Sendo assim, ao fazer a atribuição
String str1 = new String();
str1 = "teste";
você está apontando str1 para um novo objeto, ao invés de definir o valor interno da String criada com new na 1a linha. [/quote]
Certo, apenas para eu entender bem entao (não consigo testar agora o código, mas testarei mais tarde).
Se ao invés de String eu estivesse usando StringBuilder, com append e setLength o resultado seria o mesmo obtido nos objetos do tipo Item, ou seja, os dois objetos apontando para a mesma referência, certo?
Obrigado pela resposta.[/quote]
Sim. Assim que puder, faça muitos testes e brinque bastante com estes conceitos. Além de serem importante no dia-a-dia, uma prova de certificação cobra muito esse conteúdo.
[quote=rmendes08][quote=jks1903][quote=rmendes08]É exatamente a mesma coisa! Você precisa observar apenas que cada literal String como “Oi mundo” ou “String em Java” é um objeto. Sendo assim, ao fazer a atribuição
String str1 = new String();
str1 = "teste";
você está apontando str1 para um novo objeto, ao invés de definir o valor interno da String criada com new na 1a linha. [/quote]
Certo, apenas para eu entender bem entao (não consigo testar agora o código, mas testarei mais tarde).
Se ao invés de String eu estivesse usando StringBuilder, com append e setLength o resultado seria o mesmo obtido nos objetos do tipo Item, ou seja, os dois objetos apontando para a mesma referência, certo?
Obrigado pela resposta.[/quote]
Isso aí mesmo, fiz os testes e foi conforme o previsto.
Obrigado pela ajuda, foi bem esclarcedor.
Sim. Assim que puder, faça muitos testes e brinque bastante com estes conceitos. Além de serem importante no dia-a-dia, uma prova de certificação cobra muito esse conteúdo.[/quote]