黑马程序员技术交流社区
标题:
int.Parse和Console.Toint32有什么区别呢
[打印本页]
作者:
李稳023
时间:
2014-2-9 18:06
标题:
int.Parse和Console.Toint32有什么区别呢
本帖最后由 李稳023 于 2014-2-9 19:09 编辑
从CSDN下载的视频里,苏坤老师用的一直都是Convet.Toint32。但是我从书里面多半都是int.Parse.
请问他们的区别是占用资源的区别还是别的呢?
作者:
流失的温度0
时间:
2014-2-9 19:30
Convert不再仅是内存级别的转换,而是考虑数据意义的转换。Convert是一个加工、改造的过程。
如果你用反编译工具查看Convert.ToInt32的话,你会发现它是这样的。
public static int ToInt32(string value)
{
if (value == null)
{
return 0;
}
return int.Parse(value, CultureInfo.CurrentCulture);
}
复制代码
也就是Convert.ToInt32 内部调用了 int.Parse
如果Convert.ToInt32的参数为null,则返回值为0,到Int.Parse这就会抛异常
为“”时,ToInt32和Int.Parse都会抛异常
用Int.Parse的时候可以试试用Int.TryParse,这个转换失败会返回一个false。不会抛异常。
作者:
Darkhorse′Xa
时间:
2014-2-9 19:39
嗯,按楼上说的Reflector来看一下就明白了
1.ToInt32会进行是否为null的判断如果是返回0,不是则调用int.Parse()
2.int.Parse()如果传入null则会抛异常
总结:如果传入的string值为null,ToInt32将会返回0.而int.Parse()则会抛异常
作者:
李稳023
时间:
2014-2-9 19:57
流失的温度0 发表于 2014-2-9 19:30
Convert不再仅是内存级别的转换,而是考虑数据意义的转换。Convert是一个加工、改造的过程。
如果你用反编 ...
哦,回答的很仔细!
作者:
琦翔q
时间:
2014-2-10 00:11
上面说的都挺详细了,我就在“日常实际应用”上,说说不同~
1,int.Parse只针对“字符串”类型,即string类型转化为int类型。而Convert除了string类型试用之外,还能适用于其它类型(比如object),加上在null值,空字符串的处理上,比较int.Parse都有更好和更成熟的解决处理方案,使得Convert往往成为大家普遍喜欢优选的——而这种“潜意识”其实也符合实际应用(有点类似于老马说的“防御性编程”,适用更多的状况,使得程序的健壮性更好)
2,Convert由于是int.Parse的“再包装”(2L也提到了),因此无疑会导致系统开销变大,从系统(程序)的优化角度来讲,如果确保int.Parse能够完成功能且不会带来任何其它“不确定的因素”导致“系统(程序)稳定性,健壮性”,那么int.Parse是“完美解”,而Convet是“合理解”——比如当代码写到千万行的时候,一个可以在pc机上跑的嗷嗷叫,另一个却在大服务器机组上都卡卡卡,这就是优化的问题了~(当然,Convert和int.Parse的系统开销差别不会夸张到那么大的水准)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2