To com a seguinte dúvida em relação a criação de objetos String.
publicStringmakinStrings(){Strings="Fred";// "Fred" -> UM OBJETOs=s+47;// "47" + "Fred47" -> DOIS OBJETOSs=s.substring(2,5);// "ed4" -> NÃO SERIA UM NOVO OBJETO?s=s.toUpperCase();// "ED4" -> NÃO SERIA UM NOVO OBJETO?returns.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?
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.
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.