Quando eu faço assim:
Sao criados dois objetos?
Um que seria o new String(…) e o outro “Marcelo” que vai no construtor?
Quando eu faço assim:
Sao criados dois objetos?
Um que seria o new String(…) e o outro “Marcelo” que vai no construtor?
Quando eu faço assim:Não. Não são criados dois objetos. String nome apenas declara uma variável do tipo String sem alocar memória.Sao criados dois objetos?
Um que seria o
new String(…)e o outro “Marcelo” que vai no construtor?
new String(“Marcelo”) apenas se está criando um objeto do tipo String já com o conteúdo “Marcelo”.
Se fisesse da seguinte forma:
String nome = "";
nome = "Marcelo";
Aí neste caso a primeira linha estaria criando um objeto do tipo String com conteúdo igual a String em branco. E na segunda linha estaria criando um novo objeto em um novo endereço de memória (que seria atribuído à variável nome) com a String “Marcelo”. Mas mesmo neste último caso ainda existiria apenas um objeto, o último com a Strin “Marcelo”. O primeiro seria desalocado da memória.
Mas atenção: esta é uma particularidade dos objetos do tipo String. É o conceito de imutabilidade da classe String. Não acontece com tipos primitivos ou outros objetos.
Ao declarar
Você esta dizendo para o SO ajustar um espaço em memória para um objeto String (classe) que logo mais poderá ser instanciado.
Ao instancia-lo
Você atribui valor a ela.
É o mesmo efeito de quando você cria sua classe e instancia um objeto do mesmo tipo.
Mas é um único objeto e não dois.
Entendeu?
Não sei se consegui ser muito claro na explicação.
Acho que a duvida do amigo esta respondida né? Se sim edit e coloca resolvido ai.
E nesse caso, são quantas Strings então?
String g = "neto";
g.concat("lopes");
System.out.println(g);
Acho que a dúvida dele é referênte ao pool String.
No livro da Keity ela diz que isso:
String a = new String("abc");
O objeto String “abc” é criando no pool quando a classe é carregada -
Depois a cópia desse array de char “abc” é passada ao construtor String
em runTime, e um novo objeto é criando, dessa vez no heap.
2 objetos.
Aqui são criados 3 objetos.
Quando a classe é carrega se cria os objetos “neto” e “lopes”.
Em Runtime é criando o objeto “netolopes” que pelo fato de não ser referenciando
está elegível ao GC, assim com o objeto lopes.
Entao essa sintaxe é criado dois objetos mesmo ??
[quote=Dota]Entao essa sintaxe é criado dois objetos mesmo ??
Sim, são dois objetos. O objeto “Marcelo” e o que é criado após o new, com o conteúdo idêntico.
[quote=ViniGodoy]
Entao essa sintaxe é criado dois objetos mesmo ??Sim, são dois objetos. O objeto “Marcelo” e o que é criado após o new, com o conteúdo idêntico.
Outra duvida que tenho quando faço:
“Marcelo” além de ir para o pool de strings ele vai pro heap tb? Ocorre algo como new String(“Marcelo”) implicitamente? Ou não o objeto so reside no pool.
Quando faço:
Acontece um autoboxing e é feito implicitamente new Integer(5) que vai para o Heap e tb para um cache? Ou so no cache?
Quando você faz
Somente 1 string é criada. Ela vai para o pool e a referência dela também é guardada na sua variável. Nada fica no heap.
Quando você faz:
O compilador transforma em:
Se o número estiver no intervalor que cabe em um byte (de -126 até 127), é retornado o objeto do Pool.
Caso contrário, o valueOf cria um novo objeto.
Note que não é dado um new. Isso aqui:
Sempre cria um novo objeto no heap.
O “5” literal também não cria nada. O Pool com os Integers é criado assim que a VM é carregada.
De brinde, você já tem 255 objetos do tipo Integer lá dentro.
Então, se eu fizer isso por exemplo:
Isso mesmo?
Sim, isso mesmo.
No java 7 o pool de objetos Integer será configurável. Mas até então, está certo o que vc falou.
E tem essa situação também:
String x = new String("Marcelo");
String y = new String("Marcelo");
Aqui são criados 3 objetos. 2 Strings com o new, e 1 no pool. O do pool é reaproveitado na linha 2.
Obrigado amigo.
Vini como vai ser o pool dos Integers no java 7?
Igualzinho, só vai ter um parâmetro na inicialização da VM para dizer quantos inteiros você quer lá. A sintaxe exata eu não lembro, mas já vi o Entanglement, o Thingol e acho que o Bezier Curve postando por aí (eu nem me ligo tanto nas novidades do próximo Java assim, prefiro deixar pra estudar depois que ele existir).
Igualzinho, só vai ter um parâmetro na inicialização da VM para dizer quantos inteiros você quer lá. A sintaxe exata eu não lembro, mas já vi o Entanglement, o Thingol e acho que o Bezier Curve postando por aí (eu nem me ligo tanto nas novidades do próximo Java assim, prefiro deixar pra estudar depois que ele existir).
Bacana de mais!!! Eu andei lendo por ai algumas coisas tb sobre o 7, mas nao vi nada á respeito disso eheh. Vlw Vini.