对装箱有一定的理解,它是把值类型隐式的转换成引用类型。
大家看下面的两段代码:
class Program
{
static void Main(string[] args)
{
int i = 9;
f(i,i);//此处应该有两次装箱吧?
}
public static void f(object o1, object o2)
{
if (o1 == o2)
System.Console.WriteLine("Same reference");
else
System.Console.WriteLine("Different reference");
}
}
结果:Difference reference
class Program
{
static void Main(string[] args)
{
int i = 9;
object o = i;//此处装箱
f(o,o);
}
public static void f(object o1, object o2)
{
if (o1 == o2)
System.Console.WriteLine("Same reference");
else
System.Console.WriteLine("Different reference");
}
}
结果:Same reference
我的问题是:o1==o2,比较的是什么呢?值和类型?
为什么两段代码执行的结果不一样呢?
望高手详解。
大家看下面的两段代码:
class Program
{
static void Main(string[] args)
{
int i = 9;
f(i,i);//此处应该有两次装箱吧?
}
public static void f(object o1, object o2)
{
if (o1 == o2)
System.Console.WriteLine("Same reference");
else
System.Console.WriteLine("Different reference");
}
}
结果:Difference reference
class Program
{
static void Main(string[] args)
{
int i = 9;
object o = i;//此处装箱
f(o,o);
}
public static void f(object o1, object o2)
{
if (o1 == o2)
System.Console.WriteLine("Same reference");
else
System.Console.WriteLine("Different reference");
}
}
结果:Same reference
我的问题是:o1==o2,比较的是什么呢?值和类型?
为什么两段代码执行的结果不一样呢?
望高手详解。
解决方案 »
- 高手帮我看看,保存图片到数据库,MyCommand.ExecuteNonQuery()出错
- 关于DataGridView和BindingNavigator的使用
- 很郁闷的问题,就是找不出原因来.请高手帮忙!在线等.大伙千万不要看没有分就不理,有分就一定给大家!
- 关于多线程的问题,急呀
- 都有哪些原因造成socket发送或者接收慢?
- ProcessCmdKey的问题 欢迎高手来解答哈~
- Winform 中如何使用JITDSign.ocx这个组件
- 如何获得ListView中某一行某一列的坐标,以及长度、宽度等?
- 请问一下 用C#怎么在窗体上画一个椭圆? 大侠们给点源代码吧!
- 新手求助
- C#关于IC卡写卡的问题
- Visual C# + SQL Server数据库开发与实例 这本书的光盘谁有,我的丢了。
第二个在调用方法时相当于object o1=o; object o2=o o里面是i的内存地址所以o1==o2
o1==o2比较的是o1,o2的值前面3帖不好意思
第二种在函数中去装箱,他们会指向同一个数据,但是是两个不同的对象,所以地址不同
o1与o2分别指向托管堆的2个不同地址,所以o1==o2的结果为false第一个例子中,只发生了一次装箱操作,在托管堆上只存放了1对象
o1与o2指向的是托管堆中的同一地址,所以o1==o2的结果为true
第三段有错误:
第二个例子中,只发生了一次装箱操作,在托管堆上只存放了1对象
o1与o2指向的是托管堆中的同一地址,所以o1==o2的结果为true
这个地方装箱一次,只有一个对象.地址和值都相同.