How many String objects will be created when this method is invoked?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6
A resposta dessa questão, segundo o TestKiller é C, porém se partirmos do princípio que Objetos Strings são imutáveis, acredito que a resposta seria 4,
pois na linha 1, 2, 3 e 4 é criado objetos Strings e atribuido a variável “s”.
A questão é clara quanto ao momento da criação das String’s. Ela quer saber quantas Strings são criadas quando o método invocado, e de fato, a resposta é 3 String’s.
2 String’s são criadas na compilação: “Fred” e “47”. Quando o método é invocado são criadas mais 3:
Cara, eu não tenho certeza.
Se me lembro bem essa é a questão 91 do TestKiller…que está com a pergunta errada.
Se não me engano ela quer saber quantos objetos estão disponiveis para a coleta de lixo…
Só pra confirmar da uma pesquisada no fórum sobre isso, que já tem alguns tópicos.
rafael_souza0
Vou procurar.
De qualquer forma, obrigado
Henrique.tenorio
Realmente são 4 objetos. Eu tambem estou estudando para a certificação e tive esta duvida pelo que pesquisei a pergunta esta errada mesma.
sidney.tavares
Olá a todos, desculpem postar neste tópico, mas para mim não ficou claro, eu achei a questão interessante, então copiei o código e executei, na minha modesta opinião acredito que a resposta correta seja mesmo 3 objetos, mas contrariando a resposta dada pelo amigo rmendes08, acredito que a linha:
s=s.toUpperCase();
Não cria um novo objeto, apenas passa o objeto criado na linha anterior para letras maiúsculas, se estiver errado por favor me corrijam, mas acredito que seja isso mesmo. Abraços.
asousaj
sidney.tavares:
Olá a todos, desculpem postar neste tópico, mas para mim não ficou claro, eu achei a questão interessante, então copiei o código e executei, na minha modesta opinião acredito que a resposta correta seja mesmo 3 objetos, mas contrariando a resposta dada pelo amigo rmendes08, acredito que a linha:
s=s.toUpperCase();
Não cria um novo objeto, apenas passa o objeto criado na linha anterior para letras maiúsculas, se estiver errado por favor me corrijam, mas acredito que seja isso mesmo. Abraços.
Lembre-se Strings são imutaveis, logo foi criada uma nova String com as letras em maiusculas.
sidney.tavares
asousaj,
Então sendo dessa forma a resposta correta seria 4 objetos String? Valeu pela resposta.
Henrique.tenorio
asousaj:
sidney.tavares:
Olá a todos, desculpem postar neste tópico, mas para mim não ficou claro, eu achei a questão interessante, então copiei o código e executei, na minha modesta opinião acredito que a resposta correta seja mesmo 3 objetos, mas contrariando a resposta dada pelo amigo rmendes08, acredito que a linha:
s=s.toUpperCase();
Não cria um novo objeto, apenas passa o objeto criado na linha anterior para letras maiúsculas, se estiver errado por favor me corrijam, mas acredito que seja isso mesmo. Abraços.
Lembre-se Strings são imutaveis, logo foi criada uma nova String com as letras em maiusculas.
Então na realidade temos 5, pois
cria 2 novos objetos o “47” é um, e o (s+“47”) representa outro.
De qualquer maneira, essa é uma das questões mais perguntadas (e com menor probabilidade de cair na prova de verdade) aqui do GUJ.
Olhem os resultados da consulta no Google:
Valew a resposta entanglement,
então são realmente 3.
Pra quem tem o livro da kathy Sierra (Java 6 ingles), da uma olhadinha no capitulo 6, página 433/434.
“Important Facts About Strings and Memory”
Henrique.tenorio
3 o cacete!
asousaj
“Fred” e “47” já existiam no pool antes do método ser invocado.
Pergunta é quantas são criadas ao se invocar o método. 3.
Da pra provar isso via IDE(eclipse ou netbeans)? Não achei como.
Abç a tds!
Henrique.tenorio
“Fred” e “47” já existiam no pool antes do método ser invocado.
Pergunta é quantas são criadas ao se invocar o método. 3.
Da pra provar isso via IDE(eclipse ou netbeans)? Não achei como.
Abç a tds!
Só reformulando a pergunta então. Ao final da execução do método quantos objetos foram criados?
Henrique.tenorio
Fatos Importantes Relacionados aos Objetos String e a Memória
Um dos objetivos principais de qualquer linguagem de programação sofisticada é fazer uso eficiente da memória.
Com o crescimento dos aplicativos, é muito comum que Strings literais ocupem grandes espaços da memória, e que
geralmente haja muita redundância dentro do universo das Strings literais de um programa. Para tornar a linguagem
Java mais eficiente no uso da memória, a JVM deixa reservada um área especial chamada “pool constante de Strings”.
Quando o compilador encontra uma String literal, verifica o pool para ver se já existe uma idêntica. Se uma coincidência
for encontrada, a referência ao novo valor literal será direcionada para a String existente e nenhum objeto String literal
novo será criado (a String existente simplesmente terá uma referência adicional). Agora podemos começar a ver por que
tornar objetos String imutáveis é uma ideia tão boa. Se diversas variáveis de referência apontam para a mesma String
sem nem mesmo terem informação disso, seria muito ruim se alguma delas pudesse ter o valor da string alterado.
Esta é a citação do livro. Mesmo assim não consigo entender a pergunta.