c# - 为什么我们在初始化字符串时不使用 new 运算符?

标签 c# .net

我在面试中被问到这个问题:字符串是引用类型还是值类型。

我说的是引用类型。然后他问我为什么我们在初始化字符串时不使用 new 运算符?我说是因为 c# 语言具有更简单的创建字符串的语法,并且编译器会自动将代码转换为对 System.String 类的构造函数的调用。

这个答案是否正确?

最佳答案

字符串是不可变的引用类型。有 ldstr允许将新对象引用推送到字符串文字的 IL 指令。所以当你写:

string a = "abc";

编译器测试 "abc" 文字是否已经在元数据中定义,如果没有则声明它。然后它将这段代码翻译成以下 IL 指令:

ldstr "abc"

这基本上使 a 局部变量指向元数据中定义的字符串文字。

所以我会说你的答案不太正确,因为编译器不会将其转换为对构造函数的调用。

关于c# - 为什么我们在初始化字符串时不使用 new 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328707/

相关文章:

c# - 在调用 Read() 之前尝试访问字段无效,但我先调用了 Read()

c# - 使用 mysql c# 创建安装程序包

c# - 有哪些开源工具可以检查软件架构的健壮性?

.net - 在托管 C++ 中创建 KeyValuePair

c# - 实现对公众只读但对继承人可写的属性的最佳方法是什么?

c# - 将项目从文本框添加到列表框

c# - 登录前握手时出错

c# - Npgsql.EntityFrameworkCore.PostgreSQL.Infrastructure.Internal.NpgsqlOptionsExtension 类型中的方法 'get_Info' 没有实现

.net - 通过 Converter 或 ExtensionMethod 读取属性属性

c# - 将触发器绑定(bind)到父集合中的元素