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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦碧 黑马帝   /  2012-2-7 22:54  /  1544 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在实现compare或者comparTo方法时
毕老师喜欢这样写
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));

而我的习惯是
return s1.getAge()-s2.getAge();
到现在为止,程序都没有什么问题

我这样写会不会有什么问题(比如安全隐患)?

4 个回复

倒序浏览
个人觉得这两种在实现功能的时候一样,至于有没有安全隐患,等高手解答。
第一种是面向对象思想,强转成整型对象,调用comparerTo()方法。
第二种是利用的map类的特性,返回为正则为前者大于后者。

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
其实毕老师的写好较好,因为易读
compareTo一看就知道是比较
用变量封装对象来比较返回是比较通读的

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
毕老师的写法
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
是面向对象的比较通用的方法吧,对于实现了comparable接口的类,都可以这么写的,例如 String类也可以这么做

而楼主的
return s1.getAge()-s2.getAge();
是因为getAge()方法返回值类型是int类型的,而我们在实现compare或者comparTo方法时,int compareTo(T o) 方法的返回值类型也是int类型的,所以可以直接return s1.getAge()-s2.getAge(),但若是对于其他实现了comparable接口的类类型的变量,直接用减号就有点儿说不通了

小结一下:
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge())); 面向对象,调用compareTo方法比较通用
而return s1.getAge()-s2.getAge(); 应该是一些返回值类型为int的特例吧
回复 使用道具 举报


compare 和 compareTo 方法返回的结果都有三种情况:
1,正数    :表示前者大于后者
2,负数    :表示前者小于后者
3,  0       :表示元素相同。

return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
return s1.getAge()-s2.getAge();

这两句代码都是正确的,但是为了程序更具严谨性,还是使用毕老师的方法比较好。
这也是代码的一种优化情况。
因为当别人看到compareTo时,自然会想到该语句会返回三种情况,代码更具阅读性。
如果s1.getAge()-s2.getAge();这样写,返回的是一个数字,别人看到时会以为是在做求职运算。


所以建议使用compareTo方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马