- 示例代码
第一种(错误):TestEquals{ public Long static DEFALUT_INVARIABLE = new Long(1); public f(){ Long result = otherMethod(...); if(DEFALUT_INVARIABLE.equals(result)){ ... } } }
第二种(正确):
TestEquals{ public Long static DEFALUT_INVARIABLE = new Long(1); public f(){ Long result = otherMethod(...); if(result.equals(DEFALUT_INVARIABLE)){ ... } } }
- 讨论:
这里的代码是想判断一个结果值是否是预期的结果,应该把被比较的值放在前面,期望值放在后面.相当于一个主动方,一个是被动方,为什么呢?理由如下. - 观点:
- 这样更符合思维逻辑:我是想检测result是否等于DEFALUT_INVARIABLE; 而不是DEFALUT_INVARIABLE是否等于result.虽然结果一样,但这涉及到一个逻辑思维的转换.在比较复杂的if语句中,这种思维转换就会很麻烦,也只有在这种时候,才会体现出这种讲究的好处.
- 对于临界值null,多了一次检测的好处,若result是null,则在第一种编码中是不会报错,结果永远是false,而在第二种编码下,程序就会抛出NullPointerException. null在很多时候都是需要特殊对待的
- 反例:
对于两个值都是从方法获得临时变量,就没办法上述实现观点二.但是,无论如何,在大多数情况下,都会涉及到观点一. - 注意:对于方法的返回值,在正常情况下返回null值的做法,是件值得商榷的事情,需要返回null的情况是少之又少,这里就不讨论
讨论equals方法的使用
最新推荐文章于 2022-12-19 17:36:04 发布