Observe o trecho de código C# a seguirString s1, s2, s3, s4;...

Próximas questões
Com base no mesmo assunto
Q753976 Programação

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,


Alternativas

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