int.toString()会进行装箱操作吗 Int32 v = 5;Object o = v;Console.WriteLine(v.ToString()+","+(Int32)o);上面代码中,v.ToString会进行装箱操作不~? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/chclvzxx/article/details/8222568 我就是因为上面没明确说明我才问这个问题的...上面的连接是重写了ToString的方法的...如果没重写ToString的方法,那还会装箱不~? 值类型转成引用类型为装箱,INT只值类型,string为引用类型。。 v.ToString是Object.ToString,不是int.ToString 我就是因为上面没明确说明我才问这个问题的...上面的连接是重写了ToString的方法的...如果没重写ToString的方法,那还会装箱不~? 不同意,就算是经过Object o = v;但v.ToString还是int.ToSting,只是int.ToString会调用valueType的ToString()而不需装箱而已... .method private hidebysig static void Main(string[] args) cil managed{ .entrypoint // 代码大小 45 (0x2d) .maxstack 3 .locals init ([0] int32 v, [1] object o) IL_0000: nop IL_0001: ldc.i4.5 IL_0002: stloc.0 IL_0003: ldloc.0 IL_0004: box [mscorlib]System.Int32 IL_0009: stloc.1 IL_000a: ldloca.s v IL_000c: call instance string [mscorlib]System.Int32::ToString() IL_0011: ldstr "," IL_0016: ldloc.1 IL_0017: unbox.any [mscorlib]System.Int32 IL_001c: box [mscorlib]System.Int32 IL_0021: call string [mscorlib]System.String::Concat(object, object, object) IL_0026: call void [mscorlib]System.Console::WriteLine(string) IL_002b: nop IL_002c: ret} // end of method Program::Main一目了然 给object v赋值int后 其实是在托管堆里新创建了一个对象.你可以把int变量更改值,看下v是不是也改了? 如果v没改 那说明他们不是一个东西 上面代码中,v.ToString会进行装箱操作不~?肯定不会。v.ToString()调用的是int.ToString()方法而不是object.ToString()方法因为int从object派生。int类型重写了基派的toString方法。当派生类重写基类方法时,调用的是派生类的方法,而不是基类方法。 谢谢你的回答...我查过了关于MSDN的资料,Int.ToSring方法是重写了ValueType的ToString的方法,换言之,Int的基类是ValueType,2楼的链接有介绍的...而装箱是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。参考MSDN http://msdn.microsoft.com/zh-cn/library/vstudio/yz2be5wk.aspx 此链接中,说明了看值类型有没有进行拆箱,就看他有没有装换成Object或者值类型所继承的接口类型...Int.ToString 此方法中,值类型转换成ValueType类型,不满足装箱的条件,(加上本人查看IL代码确实没出现BOX)所以,可以判定Int.ToString是没有装箱的了 C#类中的变量内存分配问题。高手请进 Guid.NewGuid()概率 Literal用jQuery怎么绑定传过来的数据表格 关于romoting的一个异常,大家帮忙看看可能什么原因 请问如何设置程序进入等待状态 关于用OLE连接Excel的一个猜想 如何通过程序在IIS中建一个虚拟站点(VirtualServer) 高分求助:我是个菜鸟,程序调试出错了,不会改,哪位能帮忙? 如何在C#中将一个web页面转换为txt文本 请问工具条上怎么在选中的项目上画上勾 如何将textbox中的信息写入text文件并保存 GetCustomAttributes获取不到类型属性
上面的连接是重写了ToString的方法的...如果没重写ToString的方法,那还会装箱不~?
上面的连接是重写了ToString的方法的...如果没重写ToString的方法,那还会装箱不~?
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// 代码大小 45 (0x2d)
.maxstack 3
.locals init ([0] int32 v,
[1] object o)
IL_0000: nop
IL_0001: ldc.i4.5
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: box [mscorlib]System.Int32
IL_0009: stloc.1
IL_000a: ldloca.s v
IL_000c: call instance string [mscorlib]System.Int32::ToString()
IL_0011: ldstr ","
IL_0016: ldloc.1
IL_0017: unbox.any [mscorlib]System.Int32
IL_001c: box [mscorlib]System.Int32
IL_0021: call string [mscorlib]System.String::Concat(object,
object,
object)
IL_0026: call void [mscorlib]System.Console::WriteLine(string)
IL_002b: nop
IL_002c: ret
} // end of method Program::Main
一目了然
v.ToString会进行装箱操作不~?肯定不会。v.ToString()
调用的是int.ToString()方法而不是object.ToString()方法因为int从object派生。
int类型重写了基派的toString方法。
当派生类重写基类方法时,调用的是派生类的方法,而不是基类方法。
而装箱是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。参考MSDN http://msdn.microsoft.com/zh-cn/library/vstudio/yz2be5wk.aspx 此链接中,说明了看值类型有没有进行拆箱,就看他有没有装换成Object或者值类型所继承的接口类型...
Int.ToString 此方法中,值类型转换成ValueType类型,不满足装箱的条件,(加上本人查看IL代码确实没出现BOX)所以,可以判定Int.ToString是没有装箱的了