String vs string em C#: qual a diferença e o que escolher?

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

String e string em C#: são a mesma coisa ou não? Análise com exemplos

\n\n

Se você já escreveu código em C#, certamente notou que strings podem ser declaradas de duas maneiras:

\n\n
string nome = "Ana";\nString saudacao = "Olá!";
\n\n

E ambas as opções funcionam. Surge uma pergunta legítima: qual a diferença entre string e String em C#? São tipos diferentes? Uma é mais rápida? Ou é apenas uma peculiaridade dos desenvolvedores da linguagem?

\n\n

Spoiler: não há diferença. Mas nem tudo é tão simples quanto parece à primeira vista. Vamos entender a fundo, para que você não apenas saiba a resposta para uma pergunta popular do Stack Overflow, mas também entenda por que foi feito assim e qual opção é melhor usar em projetos reais.

\n\n

Resposta curta: string é um alias para System.String

\n\n

Em C#, a palavra-chave string é apenas um alias (apelido) para a classe System.String. Da mesma forma que int é um alias para System.Int32, e bool para System.Boolean.

\n\n

Quando o compilador vê string, ele automaticamente substitui por System.String. Isso significa que ambas as declarações são compiladas para o mesmo código IL:

\n\n
// Estas duas linhas são absolutamente idênticas no nível IL\nstring a = "Hello";\nSystem.String b = "World";
\n\n

Se você abrir um .dll ou .exe compilado através do ILSpy ou dotPeek, não encontrará nenhuma diferença entre essas duas declarações.

\n\n

Mas por que ambas as opções existem?

\n\n

Historicamente, o C# herdou a sintaxe do C/C++, onde string não é uma palavra-chave, mas sim uma classe. Os desenvolvedores do .NET decidiram adicionar aliases convenientes para que o código parecesse mais natural e familiar para programadores vindos de outras linguagens.

\n\n

Além disso, os aliases não exigem a importação de namespaces. Para usar String, você precisa adicionar using System; ou escrever o nome completo System.String. Com string, não há esse problema — ele está sempre disponível.

\n\n

Quando usar string e quando usar String?

\n\n

A regra de ouro, seguida pela maioria das equipes e recomendada pela Microsoft na documentação do C#, é:

\n\n
    \n
  • Use string ao declarar variáveis, parâmetros de métodos, valores de retorno — em todos os lugares onde a palavra-chave funciona como tipo.
  • \n
  • Use String apenas ao acessar métodos estáticos da classe (por exemplo, String.IsNullOrEmpty()) ou ao usar System.String naqueles raros casos em que você precisa especificar explicitamente o namespace.
  • \n
\n\n

Por quê? Porque string é uma palavra-chave da linguagem, ela é destacada com cor na IDE e fica imediatamente claro que é uma string. String é apenas o nome de uma classe, e é mais fácil confundi-la com outras classes.

\n\n

Exemplo de bom estilo

\n\n
// Declaração de variável (usamos string)\nstring nomeUsuario = "João";\n\n// Chamada de método estático (usamos String)\nif (String.IsNullOrEmpty(nomeUsuario))\n{\n    Console.WriteLine("O nome não pode estar vazio");\n}\n\n// Parâmetro de método (usamos string)\npublic void Saudar(string nome)\n{\n    Console.WriteLine($"Olá, {nome}!");\n}
\n\n

E há diferença de desempenho?

\n\n

Muitos desenvolvedores se perguntam: será que string é mais rápida que String? Ou o contrário?

\n\n

Resposta: não há diferença de desempenho. Nenhuma. Absolutamente. Após a compilação, ambas as opções se transformam no mesmo código IL. O tempo de execu

Blogs

Book Recommendations