A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李稳023 中级黑马   /  2014-2-9 18:06  /  1317 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李稳023 于 2014-2-9 19:09 编辑

从CSDN下载的视频里,苏坤老师用的一直都是Convet.Toint32。但是我从书里面多半都是int.Parse.

请问他们的区别是占用资源的区别还是别的呢?

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1

查看全部评分

4 个回复

倒序浏览
Convert不再仅是内存级别的转换,而是考虑数据意义的转换。Convert是一个加工、改造的过程。
如果你用反编译工具查看Convert.ToInt32的话,你会发现它是这样的。

  1. public static int ToInt32(string value)
  2. {
  3.        if (value == null)
  4.        {
  5.            return 0;
  6.        }
  7.       return int.Parse(value, CultureInfo.CurrentCulture);
  8. }
复制代码

也就是Convert.ToInt32 内部调用了 int.Parse
如果Convert.ToInt32的参数为null,则返回值为0,到Int.Parse这就会抛异常
为“”时,ToInt32和Int.Parse都会抛异常
用Int.Parse的时候可以试试用Int.TryParse,这个转换失败会返回一个false。不会抛异常。

评分

参与人数 1技术分 +2 收起 理由
电脑大牛 + 2

查看全部评分

回复 使用道具 举报
嗯,按楼上说的Reflector来看一下就明白了
1.ToInt32会进行是否为null的判断如果是返回0,不是则调用int.Parse()
2.int.Parse()如果传入null则会抛异常
总结:如果传入的string值为null,ToInt32将会返回0.而int.Parse()则会抛异常

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1

查看全部评分

回复 使用道具 举报
流失的温度0 发表于 2014-2-9 19:30
Convert不再仅是内存级别的转换,而是考虑数据意义的转换。Convert是一个加工、改造的过程。
如果你用反编 ...

哦,回答的很仔细!

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1

查看全部评分

回复 使用道具 举报
上面说的都挺详细了,我就在“日常实际应用”上,说说不同~

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的系统开销差别不会夸张到那么大的水准)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马