日期:2014-05-20  浏览次数:20909 次

这两种书写格式src.equals( "des ") 和 "des ".equals(src)哪个好?
这两种书写格式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推荐的!! 

我不想说什么,我只是庆幸不用改他们写的代码,还有我不是他们的用户 

还有,写程序之前最好弄清楚要做什么,用复杂且自以为正确的代码往往是程序崩溃和逻辑错误的根源 

我建议大多数新手用第二种方法,不为什么,为将来维护你们代码的人行行好吧

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

我想说,这个问题好像没有意义吧,在写代码时,要判断src.equals( "des ") 时,首先对src进行判空验证是常识吧,一般情况下,src为空,我们会走if,else的分支语句,"des ".equals(src)能不能避免空指针异常我不是很清楚,如果能,那用这种方式写代码其实也有不好的地方,那就是它不报异常了。假如src应该不能为空的,你这样写,在src为空的时候,它也不报异常,就直接……

------解决方案--------------------
瞎激情
------解决方案--------------------
http://topic.csdn.net/u/20110412/12/61c1d18e-1ba4-4538-acdd-64ffa578eca4.html