这两种书写格式src.equals( "des ")   和   "des ".equals(src)哪个好?有人说前一种好,有人说好一种好,避免了空指针异常。
我觉得这个问题很可笑 首先,请你们从异常处理的角度摆脱出来 
问一下自己你们要干什么! 显而易见,你们要判断变量src和 "des "是否相等,我并不需要关心src的值,src为null又如何?null也是一个合理的数据!假如用户在这一栏可输入可不输入,这个值那传到java程序为null不对么? 所以: 
src.equals( "dec ")隐含了一个NullPointException错误,这是我们需要避免的 
src!=null&&src.equals( "dec ")只不过显式规定了src不等于null 
而 "dec ".equals(src)和上式从效率到规范到任一一种形式完全相同 
因为string的equals方法先判断是否和本身相等然后就判断参数是否为String,如果不是马上return   false 所以,归根到底,你们只不过是把equals()里面的这个方法提到外面来而已。在简单地说,为了心安理得的写安全的代码,你们把这个判断提到外面来来满足自己的自信心。 我真的很佩服多数人,居然有这么多千奇百怪的理论,甚至有人说两个都会抛异常,甚至还有人用try/catch,还要throw!!还有人说这个是sun推荐的!! 我不想说什么,我只是庆幸不用改他们写的代码,还有我不是他们的用户 还有,写程序之前最好弄清楚要做什么,用复杂且自以为正确的代码往往是程序崩溃和逻辑错误的根源 我建议大多数新手用第二种方法,不为什么,为将来维护你们代码的人行行好吧

解决方案 »

  1.   

    StringUtils.equals(str1, str2) 最省心了,啥也不用管
      

  2.   

    "des ".equals(src)
    这个好一些,应该可以避免空指针异常。
      

  3.   

    避免了空指针异常一定好吗?src可以为空或者对null判断过必然第二种好那么如果src不能为空,也没判断过,导致传null出现问题,那么我们是不是会漏过了出现问题的地方呢?
      

  4.   


    "des ".equals(src)这种形式,能从jdk的源码里面找到类似的用法吗?jdk的源码应该是比较有说服力吧?
      

  5.   

    我想说,这个问题好像没有意义吧,在写代码时,要判断src.equals( "des ") 时,首先对src进行判空验证是常识吧,一般情况下,src为空,我们会走if,else的分支语句,"des ".equals(src)能不能避免空指针异常我不是很清楚,如果能,那用这种方式写代码其实也有不好的地方,那就是它不报异常了。假如src应该不能为空的,你这样写,在src为空的时候,它也不报异常,就直接走src和“des”不相等条件了,你调试时很难发现问题,因为它不报异常。当程序写的很大时,对于不报异常的代码反而更不好调试和维护。所以楼主说的为将来维护你们代码的人行行好吧我不太认同。
      

  6.   

    我不觉得楼主说的对,如果src对象是哪个函数结果传过来的,而此函数结果为空可能是出现了错误,而用第二种却隐藏了这种错误,而这种错误可能一直隐藏
      

  7.   

    说的是啊,还是看需求,有些时候null是要被识别出来的,比如你需要告诉用户他没有输入,还是他输入错了。--signature--------------------------
    http://www.purji.com/list-8.htm
      

  8.   

    "des ".equals(src)
    这个好一些,应该可以避免空指针异常。即如果 src 为null时也不会抛出异常
      

  9.   

    抛异常不好么?如果都用第二个那如果需要src不为null的不久发现不了了么!异常不一定是坏的!
      

  10.   

    http://topic.csdn.net/u/20110412/12/61c1d18e-1ba4-4538-acdd-64ffa578eca4.html
      

  11.   

    第一种习惯要做null值判断!
      

  12.   

    "des ".equals(src) 一般用这个。
      

  13.   

    这个没有什么讨论的意义
    这个函数本来就是用来检验src和des是否相等,这应该是大多数程序使用这个函数的初衷
    校验src是否为空是用 src==null或其他语句来校验难道要用src.equals("des ")来校验src为null?
    所以使用"des ".equals(src)才是正确的。