日期:2014-05-18  浏览次数:20765 次

类型问题
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