我在面试中被问到这个问题:字符串是引用类型还是值类型。
我说的是引用类型。然后他问我为什么我们在初始化字符串时不使用 new 运算符?我说是因为 c# 语言具有更简单的创建字符串的语法,并且编译器会自动将代码转换为对 System.String 类的构造函数的调用。
这个答案是否正确?
最佳答案
字符串是不可变的引用类型。有 ldstr允许将新对象引用推送到字符串文字的 IL 指令。所以当你写:
string a = "abc";
编译器测试 "abc"
文字是否已经在元数据中定义,如果没有则声明它。然后它将这段代码翻译成以下 IL 指令:
ldstr "abc"
这基本上使 a
局部变量指向元数据中定义的字符串文字。
所以我会说你的答案不太正确,因为编译器不会将其转换为对构造函数的调用。
关于c# - 为什么我们在初始化字符串时不使用 new 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328707/