Observe o trecho de código C# a seguirString s1, s2, s3, s4;...
Observe o trecho de código C# a seguir
String s1, s2, s3, s4;
s1 = "Maria";
s2 = "Joao";
s3 = s1 + s2;
s4 = "Maria";
Durante a execução desse código serão instanciados,
no heap,
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B - 3 objetos.
A questão envolve o entendimento de como o gerenciamento de memória e o armazenamento de strings são realizados na linguagem C#. Ao criar strings, elas são alocadas no heap, que é uma área de memória usada para armazenar objetos durante a execução de um programa. O C# possui um recurso chamado interning que otimiza o uso de memória para strings imutáveis, reutilizando instâncias de strings idênticas.
No trecho de código em questão, s1 é inicializado com o valor "Maria", e s2 com o valor "Joao". Ao fazer isso, são criados dois objetos string distintos no heap. Depois, s3 é inicializada como a concatenação de s1 + s2, o que resulta em um novo objeto string "MariaJoao" sendo alocado no heap, totalizando assim 3 objetos até o momento.
Por fim, s4 é inicializada com o valor "Maria". Aqui é onde a otimização de interning entra em jogo. Como o valor "Maria" já existe no heap e é imutável, o C# não cria um novo objeto. Em vez disso, ele faz s4 referenciar o mesmo objeto que s1 já referencia. Portanto, não há alocação de um novo objeto para s4, mantendo o total em 3 objetos.
Assim, a resposta correta é que durante a execução desse código, serão instanciados no heap 3 objetos.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Strings são mantidas em uma pool interna. O s4 não irá criar um novo objeto porque já existe um "Maria" criada por s1
Em Java acontece a mesma coisa. Isso é uma implementação do padrão de projetos de software "Flyweight"
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo