string 与 String 的区别

18 阅读2分钟

在C#中 string​ 和 String 到底有什么区别?哪个才是正确的写法?

一、本质:同一个类型

C# 中 string​ 和 String​ 指向同一个类型——System.String。

// 以下两行完全等价
string a = "hello";
String b = "hello";

// 验证类型相同
Console.WriteLine(typeof(string) == typeof(String));  // True
Console.WriteLine(typeof(string).FullName);            // System.String

核心解析:

  1. ​string​​:C# 关键字,编译时自动映射为 System.String
  2. ​String​​:.NET 基类库中的完整类型名,需要 using System; 才能直接使用

划重点: string​ 是语法糖,String​ 是真实类型。就像 int​ 对应 System.Int32​,bool​ 对应 System.Boolean。

二、使用场景:何时用哪个

2.1 变量声明:推荐 string

// ✅ 推荐:关键字更简洁
string name = "张三";
string message = "Hello World";

// ❌ 不推荐:写法啰嗦
String name = "张三";

2.2 调用静态方法:推荐 String

// ✅ 推荐:静态方法用 String 更清晰
string result = String.Format("Hello {0}", name);
bool isEmpty = String.IsNullOrEmpty(name);

// 也可以,但不够直观
string result = string.Format("Hello {0}", name);

2.3 类名引用:必须用 String

// 反射、泛型约束等场景必须用 String
Type t = typeof(String);
var list = new List<String>();

三、编码规范:统一风格

推荐做法如下:

场景推荐写法原因
变量声明string关键字更简洁,符合 C# 风格
参数/返回值string保持一致性
静态方法调用String明确表示调用的是 .NET 类型方法
类型引用String反射、泛型等场景必须用

常见坑: 混用两种写法会导致代码风格不统一,降低可读性。先看一个混用示例:

// ❌ 混用风格
String GetName(string id) {
    return String.Format("User_{0}", id);
}

// ✅ 统一风格
string GetName(string id) {
    return string.Format("User_{0}", id);
}

四、性能差异

结论:没有性能差异。

// 编译后完全相同的 IL 代码
string a = "hello";
String b = "hello";

两者编译为相同的中间语言(IL),运行时行为完全一致。

五、总结

对比项stringString
本质C# 关键字.NET 类型
完整名称System.StringSystem.String
是否需要 using不需要需要 using System;
推荐场景变量声明静态方法/类型引用
性能相同相同

最后: 记住一个原则——变量声明用 ​string​​ ,调用静态方法 / 引用类型名用 ​String​​ 。 这不是技术问题,而是代码风格和可读性的选择。统一风格比纠结哪个“更正确”更重要。

‍