Java开发的一些小经验一(判断字符串是否为空)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java开发的一些小经验一(判断字符串是否为空)

Java开发的一些小经验一(判断字符串是否为空)

 2014/4/1 4:02:15  jiiming  程序员俱乐部  我要评论(0)
  • 摘要:在做Java开发的过程中,经常会有一些这样或那样的错误,这些错误在一些或深入浅出、或入门的书里面都有提到过,但是这就像是生活中的一些教训,说多少遍都是白扯,只有自己经历了,才会懂。但是还是要写下来,一来作为自己的一个总结、反思,二来给不幸看到这篇小博客的同学们一点启发,哪怕在某天写代码的过程中有一瞬间想起来,并在自己的代码中使用这些小的技巧。虽然不能让程序一下子健壮起来,更不可能一下子让写代码的人高达上,但是至少会减少中午午睡的时候被叫醒去解决问题的次数。文章十分的浅显,高手、大拿可以直接掠过
  • 标签:Java 经验 小经验 开发 字符串
        在做Java开发的过程中,经常会有一些这样或那样的错误,这些错误在一些或深入浅出、或入门的书里面都有提到过,但是这就像是生活中的一些教训,说多少遍都是白扯,只有自己经历了,才会懂。
        但是还是要写下来,一来作为自己的一个总结、反思,二来给不幸看到这篇小博客的同学们一点启发,哪怕在某天写代码的过程中有一瞬间想起来,并在自己的代码中使用这些小的技巧。虽然不能让程序一下子健壮起来,更不可能一下子让写代码的人高达上,但是至少会减少中午午睡的时候被叫醒去解决问题的次数。
        文章十分的浅显,高手、大拿可以直接掠过。
        今天就聊聊判断一个字符串是否为空
        经常在程序里面需要判断某一个字符串是否是空的,尤其是用在判断方法的参数是否为空,比如:
class="java" name="code">/*
* foo 
* version 1
	*/
public boolean foo(String param){
	//经常用这种方法来判断对象是不是空
	if(param == null || param.equals("")){
		//Some Code
	}
	//Do someting
}

        如果一眼就看出上面代码的问题,说明你的代码已经敲了不少,有可能是吃过空指针的亏,有可能是聪明人一学就会这两种情况都不错,因为后面就不会再因为这样的代码而吃亏了。
        下面就想想办法,看看怎么来优化一下。
        由于foo这个方法中,if语句是用的或关系,这样的话,由于有个短路判断的存在,当param是null的时候,就不会再执行后面的equals方法了,这样的话可以在一定程度上掩盖这种写法的问题。
        但是,当上面的或关系变成且的关系,会出现什么情况呢?回报空指针异常
这是因为当判断了param==null后,再判断param.equal(""),这时,由于param指向的是null,所以会抛出异常来。
        那么把代码改下把,把foo方法变成下面这样:
/*
* foo 
* version 2
	*/
public boolean foo(String param){
	//经常用这种方法来判断对象是不是空
	if(param == null && "".equals(param)){
		//Some Code
	}
	//Do someting
}

        这样的话,不论param是否为空,都不会出现异常了。
        如果事情就这样结束了该多好,但是回头再看foo的第二版时,发现还是有点儿不大对头,万一哪天我把param==null这半句,少写一个等号,会出现什么呢?先赋值,然后再判断,抛出空指针,太幸运了,在开发阶段就能发现隐含的BUG。
        但是假设把if语句变成下面的形式呢:
       
if("".equals(param) && param = null)

        这时,条件判断是为真的,但是好不容易判断了个非空字符串,没相当又在自己的手里变成空的了!
        那么继续优化一下foo吧
/*
* foo
* version 3
	*/
public boolean foo(String param){
	//经常用这种方法来判断对象是不是空
	if(null == param && "".equals(param)){
		//Some Code
	}
	//Do someting
}

        第三版的foo和第二版相比,只是把null和param换了下位置。再来分析一下发现,如果少打一个等号,编译都不会通过了!这就杜绝了我们在判断一个对象的时候无意间修改这个对象。
        上面说的这些不只是限于Java有这种问题,在C、C++以及其他语言中都可能会有这样的问题,但是思路都是一样的,这有点类似于写作文,不论是小学生还是初中生,或者是高中生,以及各种作家,在写记叙文时,都免不了六要素:?人物、时间、地点、事件的起因、经过和结果。
发表评论
用户名: 匿名