Formação .NET Carreiras Cursos Eventos Blog

Clique em qualquer espaço vazio ou Esc para fechar

Entrar
Ver Planos
Ver Planos Entrar
Página Principal
Formação .NET
Carreiras
Todos os Cursos
Agenda
Blog
Início
Blog
String, System.String e String Builder no C#
Backend
String, System.String e String Builder no C#
14/01/2022
André Baltieri

String, string ou StringBuilder? Para que servem e quando devemos utilizar cada um destes tipos no C#!

String ou string

Uma string no C# é uma cadeia de caracteres que representa um tipo de valor e pode armazenar até 1 bilhão de caracteres e 2GB de memória. Podemos inicializar uma string das seguintes formas.

// Cria uma string vazia 
// Receberá warning de possível referência nula a partir do .NET 6
string meuTexto;

// Cria uma string informando um valor inicial
string meuTexto = "valor";

// Cria uma string vazia
string meuTexto = string.Empty;

// ERRO
var meuTexto;

// Cria uma string informando um valor inicial
var meuTexto = "valor";

// Cria uma string vazia
var meuTexto = string.Empty;

// Cria uma string (Nula) que permite nulos
string? meuTexto;

Assim como nos outros tipos de valor, para permitir valores nulos em um string precisamos do ? após sua definição. Outro detalhe é o uso do string.Empty que define um valor vazio para uma string.

string? meuTexto;
string meuTexto = string.Empty;

É importante frisar que o string.Empty é apenas um sintax sugar para "", ambos tem o mesmo resultado e não influenciam na performance. A diferença é que em alguns cenário o string.Empty não é permitido por não ser considerado uma constante.

Qual a diferença entre String e string?

Tá bem, mas qual a diferença entre string e String? Por quê uma é minúscula e outra começa com letra maiúscula?

string meuTexto = "andre";
String umValor = "algum valor";

Embora string (Toda minúscula) seja a disparadamente a mais utilizada, o tipo correto para strings no C# é o System.String ou somente String, sim, S maiúsculo.

Todo tipo no .NET deriva do tipo base System e no caso das strings isto não é diferente. Desta forma, mantendo o padrão de todos os tipos no C#, a string tem seu namespace/tipo definidos como System.String.

O mesmo acontece com os tipos Int16 que é comumente chamado de short, Int32 que é chamado de int e Int64 que é chamado de long. Por conveção, toda classe/estrutura no .NET começa com letra maiúscula.

Então os tipos que usamos tanto, como short, int, string, bool, float, double não passsam de sintax sugar ou alias (Apelido) para os tipos reais no .NET.

Na prática o que isto muda?

Nada! Pode continuar utilizando seu string normalmente que para o compilador será tudo a mesma coisa, não vai afetar performance o qualquer outra coisa. É apenas algo estético.

Particularmente, acredito que muitos desses alias foram trazidos do C++, PHP e outras linguagens com sintaxe C LIKE, e por questões de harmonia foram mantidos. Tenho que concordar também que dá para contar nos dedos as vezes que usei String ao invés de string.

StringBuilder

Outro item que causa bastante confusão é o StringBuilder, mas ele age de forma bem diferente do string e String, ele tem a finalidade de concatenar strings, ou seja, juntar pedaços de textos em um texto maior.

É normal vermos o uso da concatenação de strings utilizando o operador de atribuição += do C#, o que pode não ter muito efeito negativo em cadeias de caracteres pequenas, mas em longos textos pode ser tornar um grande vilão.

var meuTexto = "Olá mundo";
meuTexto += " aqui vai mais um";
meuTexto += " e aqui mais um pedaço da string";

O que ocorre aqui é que para cada concatenação que fazemos deste modo, uma terceira variável é gerada, com conteúdo das anteriores se acumulando. Agora imagina este cenário com muitas concatenações?

Para isto, existe o StringBuilder, como o nome já diz, um "construtor de strings", feito sob medida para esta demanda de concatenação de textos.

var meuTexto = new StringBuilder();
meuTexto.Append("Olá mundo");
meuTexto.Append(" aqui vai mais um");
meuTexto.Append(" e aqui mais um pedaço da string");

Console.WriteLine(meuTexto.ToString());

No exemplo acima temos um código muito mais otimizado, utilizando o StringBuilder para construir um texto longo que é baseado em outras cadeias de caracteres. Notamos também que por se tratar de um objeto complexo, precisamos do método ToString() para imprimir o valor do texto composto na tela.

Interpolação de strings

É importante frisar que não devemos confundir a concatenação de strings com a interpolação de strings. Você pode usar a interpolação sempre que precisar, e uma das melhores formas é sinalizar isto ao compilador utilizando o $ antes da mesma.

var meuTexto = "Mundo";
var outroTexto = $"Olá {meuTexto}"

Curso de Fundamentos do C#

Quer aprender mais sobre C#? Então confere nosso curso Fundamentos do C#, que conta com mais de 100 aulas e 12.2 horas de conteúdo de forma simples, direta e objetiva.

CURSO FUNDAMENTOS DO C#

Conclusão

Embora seja algo fundamental, a criação e consumo de strings no C# pode ter suas pegadinhas e saber estes macetes pode salvar muito consumo de processamento e memória da sua aplicação, o que resulta em uma redução de custo de infraestrutura! Em suma, mais economia para o bolso da empresa!

Conheça o autor

André Baltieri

Microsoft MVP

Me dedico ao desenvolvimento de software desde 2003, sendo minha maior especialidade o Desenvolvimento Web. Durante esta jornada pude trabalhar presencialmente aqui no Brasil e Estados Unidos, atender remotamente times da ?ndia, Inglaterra e Holanda, receber 8x Microsoft MVP e realizar diversas consultorias em empresas e projetos de todos os tamanhos.

Mais popular

1

Blazor Render Modes

Frontend

2

Blazor - Rotas e Navegação

Frontend

3

Uma visão geral do Blazor

Frontend

Assine nossa Newsletter

Inscreva-se em nossa newsletter e seja o primeiro a receber atualizações sobre novos cursos, dicas de carreira, e conteúdos exclusivos em programação. Junte-se à nossa comunidade de aprendizado e impulsione sua trajetória profissional! Não perca essa oportunidade. Inscreva-se agora e comece a transformar seu futuro!

Alves & Baltieri Informática LTDA ME 21.108.579/0001-80
Sobre Como funciona Seja premium Blog
Conteúdo Formação .NET Carreiras Cursos Eventos
Suporte Termos de uso Política de privacidade Política de cancelamento Contato
Redes Sociais Youtube Discord LinkedIn Instagram Facebook

© balta.io 2013 - 2025 | Todos os direitos reservados

An unhandled error has occurred. Reload 🗙