public static String makinStrings() {
String s = "Fred";
s = s + "47";
s = s.substring(2, 5);
s = s.toUpperCase();
return s.toString();
}
Quantos objetos String será criado quando este método é invocado?
a resposta é certa é 3, porem pelos meus calculos seriam 5.
1 “fred”, 2 “47”, 3 “fred47”, 4 “ed4” e 5 “ED4”
public static String makinStrings() {
String s = "Fred"; //1 houve um new escondido no autoboxing, o java internamente faz isso: string s = new string("fred");
s = s + "47"; //2 // houve um new escondido no "47" - autoboxing, o java internamente fez: s = s + new string("47");
s = s.substring(2, 5); //3 // há um new string() dentro do método substring.
s.toUpperCase(); // o método Uppecase não cria uma nova string, e sim altera a própria
return s; // tostring() retornaria o próprio objeto que ja é uma string
}
resposta final: 3 objetos do tipo string foram criados
desculpe as classes em minusculo, meu teclado esta com problemas…
public static String makinStrings() {
String s = "Fred"; // Fred
s = s + "47"; // Fred47 e 47
s = s.substring(2, 5); // ed4
s = s.toUpperCase(); // ED4
return s.toString();
// toString retorna uma representação da classe, nada melhor que a própria String para representar tal objeto de tal tipo
}
public static String makinStrings() {
String s = "Fred"; // Fred
s = s + "47"; // Fred47 e 47
s = s.substring(2, 5); // ed4
s = s.toUpperCase(); // ED4
return s.toString();
// toString retorna uma representação da classe, nada melhor que a própria String para representar tal objeto de tal tipo
}
[/quote]
Verdade hein… o toUpperCase retorna uma String nova sim.
vou ser legal com vcs, tem uma lista de simulados no javaranch, alguns deles são free, basta se increver no site apenas
segue o link para a lista de simulados https://www.coderanch.com/how-to/java/ScjpMockTests
public String makinStrings() {
String s = "Fred"; // aqui não é criado uma string, é só atribuida da que ja esta no pool
s = s + "47"; // 1. Cria um objeto StringBuilder("Fred47")
s = s.substring(2, 5); // 2. Cria a string "ed4"
s = s.toUpperCase(); // 3. cria a string "ED4".
return s.toString(); // return this
}
apesar de não ter lido em lugar nenhum a parte do (parte do outro link):
está fazendo o seguinte:
a) O Java, ao carregar a sua classe (ou seja, antes de executar o método “makinStrings”), vê que existe uma literal “Fred” no código, e então cria uma string “Fred” e a insere no pool de strings
b) Quando você executar o método “makinStrings”, você vai simplesmente atribuir à variável s uma referência para a string “Fred”, que já está criada e está no pool de strings.
Então, para efeitos dessa questão, esse comando não conta como criação de strings.