c# - 对于 var q = "A"+ "B"+ "C",字符串连接在 C# 中是如何发生的

标签 c# .net string visual-studio-2010 immutability

<分区>

众所周知,字符串是不可变的 => 意思是,对象的内容在创建后无法更改

所以,面试问题是:

这条语句中创建了多少个对象?

字符串 q = "A"+ "B"+ "C";

我回答了两个,因为“A”+“B”创建一个对象并与“C”连接创建另一个对象。

但是,她说错了。有什么想法吗?

当像这种情况一样连接多个字符串时会发生什么情况?

最佳答案

string q = "A"+ "B"+ "C"; 会被编译器转换成:

string q = "ABC";

因为所有的字符串都是常量。所以正确答案是只创建一个对象。

从技术上讲,它被编译为以下 IL:

ldstr "ABC"

请注意,如果字符串不是常量(即您在那里使用了变量),它将被转换为对 String.Concat(string, string, string) 的一次调用。

关于c# - 对于 var q = "A"+ "B"+ "C",字符串连接在 C# 中是如何发生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099868/

相关文章:

c# - 使用正则表达式获取引号内的文本

c# - 在生成的 IL 代码中,缺少一些行。 in between 行执行什么任务?

python - 可以在 Python 中制作自定义字符串文字前缀吗?

c# - MVC4 验证不起作用

javascript - asp.net mvc 6 web api + Angular 资源帖子数组作为对象属性

c# - 如何在每张账单上生成发票编号

c# - 使用自定义身份数据库代替 ASP.NET core Identity

c# - 如何为接受 xml 文件路径作为参数的方法编写单元测试

c - 将字符串中的值替换为另一个字符串中的另一个值

java - 循环遍历字符串并检查是否满足某些条件