[RESOLVIDO] Quantidade de Objetos criados!

12 respostas
rmala_ti

Boa noite!

To com a seguinte dúvida em relação a criação de objetos String.

public String makinStrings(){
  String s = "Fred"; // "Fred" -> UM OBJETO
  s = s + 47; //  "47" + "Fred47" -> DOIS OBJETOS
  s = s.substring(2, 5); // "ed4" -> NÃO SERIA UM NOVO OBJETO?
  s = s.toUpperCase(); // "ED4" -> NÃO SERIA UM NOVO OBJETO?
  return s.toString();
}

Pergunta: Quantos objetos são criados?
Eu respondi 5, mas a resposta correta são 3 objetos.

Consigo visualizar 3 objetos: “Fred”, “47” e “Fred47”, mas os métodos substring() e toUpperCase() não criam objetos?

Alguém pode explicar?

Grato

12 Respostas

Requena

olha…
pra mim isso é pegadinha… hehehe…

mas pra mim os objetos sao…

s / “Fred” / 47;

47 é um Integer, “Fred” é uma String, e s tabmbém é uma String…

os outros casos nao criam novos objetos apenas os utiliza…

rmala_ti

Mas vc tá dizendo que 47 é um inteiro e não uma String?

Então seriam 2 objetos e não 3 “Fred” e “Fred47”

Mas acho que não é isso não.

Requena

nao…

integer nao é objeto?

o.O

to dizendo que 47 é um integer que foi instanciado e depois transformado em String e depois concatenado com s e coloca em s
tendeu?

pq tipo… uma operação só pode ocorrer entre objetos…

entao… foda essa pergunta pq tipo o
"public String metodo()" tb é um objeto do tipo Method se for ver por utilização :D…
hauidhaiuhduiasd… se considerar o objeto criado para o return pode-se dizer que tem uns 10obj nesse metodo :D…

mas seco assim… de forma simples… objetos criados foram 3 para mim 2 String e 1 Integer

rmala_ti

Entendi sim. hauahaau

Só não entendo pq os métodos não criam novos objetos.

Valeu pelas respostas

ViniGodoy

String s = "Fred"; //1 objeto s = s + 47; // Fred47" //1 único objeto. 47 é do tipo primitivo int. Não é gerado o intermediário "47" string. s = s.substring(2, 5); //1 objeto s = s.toUpperCase(); //1 objeto return s.toString(); //Nenhum objeto, retorna this

Provavelmente ele assumiu que a linha:

Obteve uma string do pool, nesse caso, não haveria criação de objeto naquela linha. Mas seria assumir algo injusto, já que normalmente questões desse tipo assumem que o pool está vazio. Ou ele perguntou “Qual é o menor número de objetos string que poderiam ser criados?”

No caso do int, não é gerado um objeto, nem mesmo o wrapper. Essa operação era possível ainda no Java 4.

W

Esta questão já foi vastamente discutida aqui no GUJ.

http://www.guj.com.br/posts/list/125340.java#677523

Literais são criados assim que a JVM carrega a classe em questão, portanto a primeira String > “Fred”, já está criada e guardada num pool de Strings quando o método makeStrings() é

chamado e os outros três passos que realmente criam objetos… pelo que entendi nas discussões.

rmala_ti

ViniGodoy:
String s = "Fred"; //1 objeto s = s + 47; // Fred47" //1 único objeto. 47 é do tipo primitivo int. Não é gerado o intermediário "47" string. s = s.substring(2, 5); //1 objeto s = s.toUpperCase(); //1 objeto return s.toString(); //Nenhum objeto, retorna this

Provavelmente ele assumiu que a linha:

Obteve uma string do pool, nesse caso, não haveria criação de objeto naquela linha. Mas seria assumir algo injusto, já que normalmente questões desse tipo assumem que o pool está vazio. Ou ele perguntou “Qual é o menor número de objetos string que poderiam ser criados?”

No caso do int, não é gerado um objeto, nem mesmo o wrapper. Essa operação era possível ainda no Java 4.

Então pelo que vc falou, seriam na verdade 4 objetos String?

Vini, boa noite!

Então ele pergunta: “Quantos objetos String serão criados quando este método for invocado?”

Obrigado.

evertonsilvagomesjav

Pois é…mas essa questão é meio injusta como diz o Vini, pq como ele iria assumir que “Fred” ja esta no pool de strings? Sendo assim realmente nao iria ser criado um objeto ali, mas do jeito que esta no exercicio pra mim o mais correto seria assumir que “Fred” não estaria no pool.

T

http://www.guj.com.br/posts/list/116352.java

evertonsilvagomesjav

thingol mas qual a certeza que “Fred” e “47” estavam no pool?

ViniGodoy

É por isso que a questão está mal formulada, a ponto de já terem sido criados 3 tópicos para ela.

rmala_ti

Valeu ai pessoal, e desculpa por ter criado um tópico repetido.

Abraço.

Criado 22 de fevereiro de 2010
Ultima resposta 23 de fev. de 2010
Respostas 12
Participantes 6