类型问题
using System;
class A
{
public static void Main()
{
string str1 = "abc ";
string str2 = "abc ";
Console.WriteLine(str1 == str2);
//Console.WriteLine((object)str1);
Console.WriteLine((object)str1==(object)str2);
string str3 = "abc ";
string str4 = string.Copy(str3);
Console.WriteLine(str3 == str4);
Console.WriteLine((object)str3 == (object)str4);
Console.WriteLine(str3.GetType());
Console.WriteLine(str4.GetType());
}
}
为什么第四个输出false?ne
------解决方案--------------------object的比较是在比较是否是同一个对象,也就是引用的地址吧。也就是ReferenceEquals的另一种形式
.net中使用字符串驻留技术,两个一样的字符串会指向同一个地址,也就是(object)str1==(object)str2为true的原因。但是使用Copy显示的创建字符串副本除外,原串和副本会指向不同的地址。
------解决方案--------------------反编译一下string类
看看他的方法和实现原理就成了
记得java中的是一个char的序列
系统保存如果初始化一个字面量的string,先检查
是不是已经有了此string,如果已经有了就取其地址,
而不是构建新的string。
copy应该是逐char复制的新的序列。是一个新的对象。
可以使用指针看看各个对象的实际内存地址。
------解决方案--------------------mark