Qual seria a utilidade de definir uma string em duas areas distintas de memoria ?
Tamanho: pode ser necessário mais de uma região de memória para armazenar uma string.
Detecção de erro: colocando uma string que completa cada região diferente, poderá se comparar depois as strings, se for igual, as regiões de memória estarão perfeitas.
Desafio: fazer a pessoa descobrir como funcionam as coisas para descobrir que não tem porquê disso… hehe
Tem a ver com Java? :shock:
Faz sentido !!!
Grato
Agora fiquei curioso, me diga uma coisa… como posso fazer com que uma String ocupe duas áreas de memória distintas?? Eu entendi direito? É isso mesmo??
bom, me corrijam se eu estiver errado…
Até onde eu sei, String é um objeto imutável, por tanto, se você definir uma String em qualquer parte de sua aplicação, ela vai ficar na memória até o fim de sua aplicação. Se vc ficar algo do tipo:
String s1 = "abc" + "def";
vc terá 3 Strings diferentes na memória{“abc”,“def”,“abcdef”};
e se em alguma outra parte de sua aplicação, vc fizer isso…
String s2 = "abc";
s2 estará apontando para o mesmo “abc” criado anteriormente, ou seja apontando para a mesma área de memória.
e para provar isso, basta executar o seguinte comando.
String s1 = new String("abc");
String s2 = new String("abc");
if(s1==s2) System.out.println("mesma área da memória");
e se vc fizer isso com qualquer outra classe, essa comparação retornará sempre falso.
[]'s
Sim, se um bloco de memória não for suficiente para armazenar uma String, ou qualquer outra variável ou objeto, terá que ocupar mais de um bloco de memória. Senão cada objeto, ou qualquer tipo de variável ou classe, seria limitado ao tamanho de bloco de memória.
Strings criadas em run-time podem ser eligíveis para o garbage collection, então não é qualquer String que vai durar até o fim da aplicação!
:!: http://www.javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html
No código mostrado acima existem 3 strings criadas em tempo de execução que podem não ficar até o fim da aplicação:
“abcdef”
new String(“abc”);
new String(“abc”);
Ah, imutabilidade não tem a ver com a permanência em memória da variável até o fim da aplicação. O que deixa as Strings até o fim da aplicação é o pool de Strings, que aproveita a característica da imutabilidade.
E outra, o pool de Strings não armazena as Strings, e sim é uma tabela de referências para as Strings guardadas no Heap.
Quaisque maiores informações podem ser encontradas no link:
http://www.javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html
Abraços!