首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串上的ReferenceEquals

字符串上的ReferenceEquals
EN

Stack Overflow用户
提问于 2015-10-06 14:17:48
回答 1查看 133关注 0票数 2

正如指示的这里一样,不能对在运行时创建的字符串进行内联。

然而,以下代码:

代码语言:javascript
复制
    class Program {
    static void Main(string[] args)
    {
        string s1 = "Programming Is Fun";
        string s3 = s1.ToString();
        Console.WriteLine(Object.ReferenceEquals(s1, s3));
    }
}

提供(相对于2015年):

代码语言:javascript
复制
True

那么,它是否以某种方式指定在运行时生成哪些字符串?

顺便说一下:

守则:

代码语言:javascript
复制
using System;
using System.Text;

class Program {
  static void Main(string[] args)
  {
    string s1 = "hop";
    StringBuilder s2 = new StringBuilder(s1);
    string s3 = s2.ToString();
    Console.WriteLine(Object.ReferenceEquals(s1, s3));
  }
}

提供(相对于2015年):

代码语言:javascript
复制
False

与mono相反(ver.4.0.2)

代码语言:javascript
复制
True

工作实例

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-06 14:25:38

String.ToString()返回对同一字符串的引用:

代码语言:javascript
复制
public override String ToString() {
    Contract.Ensures(Contract.Result<String>() != null);
    Contract.EndContractBlock();
    return this;
}

并且可以在运行时创建字符串。引用您提到的MSDN文章

运行库并不保证在运行时创建的字符串是内部的。

实习是一项昂贵的操作,通常在运行时进行实习成本太高。如果您想确保您的字符串是内部的,可以使用public static String Intern(String str)方法。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32972314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档