讨论equals方法的使用

  1. 示例代码
    第一种(错误):
    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)){
     ...
     }
     }
    }
  2. 讨论:
    这里的代码是想判断一个结果值是否是预期的结果,应该把被比较的值放在前面,期望值放在后面.相当于一个主动方,一个是被动方,为什么呢?理由如下.
  3. 观点:
    1. 这样更符合思维逻辑:我是想检测result是否等于DEFALUT_INVARIABLE; 而不是DEFALUT_INVARIABLE是否等于result.虽然结果一样,但这涉及到一个逻辑思维的转换.在比较复杂的if语句中,这种思维转换就会很麻烦,也只有在这种时候,才会体现出这种讲究的好处.
    2. 对于临界值null,多了一次检测的好处,若result是null,则在第一种编码中是不会报错,结果永远是false,而在第二种编码下,程序就会抛出NullPointerException. null在很多时候都是需要特殊对待的
  4. 反例:
    对于两个值都是从方法获得临时变量,就没办法上述实现观点二.但是,无论如何,在大多数情况下,都会涉及到观点一.
  5. 注意:对于方法的返回值,在正常情况下返回null值的做法,是件值得商榷的事情,需要返回null的情况是少之又少,这里就不讨论
<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://wiki.ebaosh.com/confluence/pages/viewpage.action?pageId=3095" dc:identifier="http://wiki.ebaosh.com/confluence/pages/viewpage.action?pageId=3095" dc:title="讨论equals方法的使用" trackback:ping="http://wiki.ebaosh.com/confluence/rpc/trackback/3095" /> </rdf:RDF> --><!-- Root decorator: all decisions about how a page is to be decorated via the inline decoration begins here. --><!-- Switch based upon the context. However, for now, just delegate to a decorator identified directly by the context. -->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值