i.tostring()和Convert.ToString(i) 区别

inti=0,请问i.tostring()和Convert.ToString(i)区别,主要想了解两个操作过程是否装箱?及装箱过程... int i=0,请问i.tostring()和Convert.ToString(i) 区别,主要想了解两个操作过程是否装箱?及装箱过程 展开
 我来答
ericpoon2001
2011-11-01 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:81.5万
展开全部
C#中没区别 ToString()的实现还和用Convert实现相同。
至于装箱,估计楼主多虑了。
1. 两个不同的类型转换,一定存在创建目标对象的过程。即创建一个字符串引用。
2. 平提到的装箱,一般存在于 int 到 Int32时的转换,但C#中实质Int32是结构体,并非Java中的一个是值类型,一个是包装类的关系。int只是C#中为Int32提供一个简易的关键字形式出现,编译为IL后还是以Int32表示。
Int32的定义:
public struct Int32 : IComparable, IFormattable,
IConvertible, IComparable<int>, IEquatable<int>
追问
其实装箱的过程也就是复制一份值类型的对象值放在堆里,然后生成一个对这个复制的值的引用放在栈里,这也是创建一个目标对象。你说的类型转换一定存在创建目标对象的过程跟这有什么区别?
追答
请看这个: http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
MSDN明确指出,装箱是
int i = 1 ;
object o = i;
而拆箱:
int j = (int)o;
以上操作。而使用i.ToString() 或Convert.ToString()转换类型,则属于类型转换的范畴。
原因:拆箱时会检查类型,而int 装箱为Object后,可以重新强转为int,但 int调用ToString()后,变成String类型,强转为int时不能通过类型检查。int 同String之间并不是MSDN中描述的装箱和拆箱的关系。
潇洒秀气
2011-10-31 · 超过30用户采纳过TA的回答
知道答主
回答量:130
采纳率:0%
帮助的人:81.9万
展开全部
都会编程引用类型,都属于装箱。。 两者没什么区别。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰麟轻武
2011-10-31 · TA获得超过603个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:291万
展开全部
反射系统源码,其实 Convert.ToString(i)
调用了
value.ToString(CultureInfo.CurrentCulture);
之后调用了Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
而i.tostring()
调用了Number.FormatInt32(this, null, NumberFormatInfo.CurrentInfo);

所以 其实他们是一样的
如果硬要分割高下,那么i.tostring()的效率略高
因为他少了NumberFormatInfo.GetInstance(CultureInfo.CurrentCulture)这一步的操作
他的返回值就是 CultureInfo.CurrentCulture

NumberFormatInfo GetInstance(IFormatProvider formatProvider)
方法中有一句话:
numInfo = formatProvider as NumberFormatInfo;
if (numInfo != null)
{
return numInfo;
}
所以可以看出他们是一样的

他们最后都调用了 public static extern string FormatInt32(int value, string format, NumberFormatInfo info);
这个是一个extern 外部方法,无法看到源码
至于是否装箱,就不得而知了
我个人认为应该是没有装箱的,只是使用int从新new了一个String对象
已经无法对该对象拆箱了
追问
你说的重新new了一个string对象,我是不是可以这样理解:只是从栈中复制一个值的副本放在托管堆里,而栈中并没有生成对这个string对象的引用,所以无法对该对象拆箱是吧。
追答
我的理解是:
取出这个int值的副本中的"数据",
然后从这个"初始数据"中实例化一个string对象
我用了"数据"这个词,也就是说跟原先的引用地址神马的都没有关系了,
最后把string放入托管堆

以上仅仅是个人的理解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gxl_zd
2011-10-31 · 超过17用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:51.8万
展开全部
只要是值类型 转换为引用类型 肯定装箱了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
计名pS
2011-11-01 · TA获得超过3649个赞
知道大有可为答主
回答量:4189
采纳率:0%
帮助的人:2203万
展开全部
--'冰麟轻武' 正解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
长夫宏艳蕊
2019-02-03 · TA获得超过3698个赞
知道大有可为答主
回答量:3016
采纳率:24%
帮助的人:250万
展开全部
string.valueof()它可以将java基本类型(int,double,boolean等)和对象(object)转换成string型
tostring()是对象的方法,它可以将该对象转换成string型,转换算法根据类型实际需要而定
,基本上java里面每个对象都会有一个tostring方法。
两者的运行结果都是相同的,只是原理不一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式