以下是我的测试案例。两个字符串都是不同的对象,但我的测试用例通过了。
我期望他们失败。因为它们是不同的对象。
string string1 = "Hello World";
string string4 = "Hello World";
Assert.AreSame(string1, string4);//Will return true
Assert.IsTrue(object.ReferenceEquals(string1,string4));
最佳答案
编译器将为相等的硬编码字符串创建一个“对象”。
但是,如果您动态创建字符串
var string1 = "Hello World";
var name = "World";
var string2 = "Hello " + name;
Assert.AreSame(string1, string2); //Will return false
Assert.IsTrue(object.ReferenceEquals(string1,string2)); // Fail
Assert.AreEqual(string1, string2); // Pass
String.Intern Method (String)
公共语言运行时通过维护一个
表,称为内部池,其中包含对
在其中以编程方式声明或创建的每个唯一文字字符串
您的程序。因此,带有
特定值在系统中仅存在一次。
关于c# - 字符串引用检查在我的单元测试中返回true,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45071870/