首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

类型有关问题

2012-01-23 
类型问题usingSystemclassA{publicstaticvoidMain(){stringstr1abc stringstr2abc Console.Write

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

热点排行