我只是对字符串和它们的比较感到困惑.我理解的是这样做:
string one = "stackoverflow";
string two = "stackoverflow";
bool equal = one == two;
Run Code Online (Sandbox Code Playgroud)
这会逐个字符比较吗?
为什么会这样?如果string是不可变的,并且如果它们具有相同的字符,则两个变量将始终引用相同的字符串.为什么编译器不检查引用?如果有一个地方,我认为引用平等意味着价值平等,我认为这将是字符串.我错过了什么?
确实,字符串文字是自动实现的,但并非所有字符串都被实现.当您动态构建字符串或在运行时以某种方式获取它时,默认情况下它不会被实现 - 您需要调用String.Intern它才能实现.
这意味着您可以使用具有不同引用的相同字符串实例.
所以,你的情况,如果你动态地构建字符串"计算器"两次,每次分配给变量one和two,的引用one,并two会有所不同,尽管价值是相同的.