黑马程序员技术交流社区

标题: 关于毕老师Map的一个小问题 [打印本页]

作者: 秦碧    时间: 2012-2-7 22:54
标题: 关于毕老师Map的一个小问题
在实现compare或者comparTo方法时
毕老师喜欢这样写
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));

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

我这样写会不会有什么问题(比如安全隐患)?
作者: Joyuang    时间: 2012-2-7 23:37
个人觉得这两种在实现功能的时候一样,至于有没有安全隐患,等高手解答。
第一种是面向对象思想,强转成整型对象,调用comparerTo()方法。
第二种是利用的map类的特性,返回为正则为前者大于后者。
作者: 彭嘉聪    时间: 2012-2-8 01:26
其实毕老师的写好较好,因为易读
compareTo一看就知道是比较
用变量封装对象来比较返回是比较通读的

作者: 逄焕玮    时间: 2012-2-8 15:36
毕老师的写法
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的特例吧
作者: 余海龙    时间: 2012-2-8 20:31


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方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2