用户名:
密码:

博客网 >

Item 10: Boolean Logic and Short-Circuit Operators

      到这个题目为止,java pitfalls的第一章"Language Syntax "已经"翻译"和转载完毕,限于外语水平和时间关系,只是粗略介绍了一些概念,关心的可以继续深入各个话题,不关心的写的天花乱坠也不会看的^_^。希望各位鼓励一下,继续其余章节的介绍。

【内容提示】在java中,要尽量使用条件操作符号(&&、||)而不是位操作符号(&、|),因为前者提供了短路操作(short-circuit),避免了运行异常。

 

 


       和C/C++一样,java支持位操作符 (& and ||) ,和C++不同的,java不仅支持条件运算符(&&和||)也支持布尔逻辑运算符 (& and |) and conditional and/or operators (&& and ||)。这个会导致你所不期望的结果。

      在C++中,下面的代码

if (ptr != null & ptr->count > 1)  // wrong operator!

      GNU C编译器会产生警告:warning: suggest parentheses around comparison in operand of &
       虽然这是合法的代码,但可能并不是你所想要的,如果ptr是null,那么程序就会崩溃。然而在java中,如果表达式都是布尔型数据,"&"将会被视为合法操作,而不是一个位操作符(see JLS 15.21.2),如下面的代码:if ((v != null) & (v.size() >; 0))  // wrong operator! 不会提示错误,但是如果v是null,将抛出NullPointerException异常。

      这时候,你可能最希望短路了!采用条件操作符

if ((v != null) && (v.size() > 0))

      如果v是null,程序不会执行操作符右边部分,从而避免异常。最简单的方案是要使用&& 和 ||,它们更加安全并且效率更高。

博客网 博客网 00
<< 网络用语Top10--拼音缩写 / java缺陷:改进代码的高效方法... >>
0/200
表情验证码:

  • 文章总数:0
  • 文章点击数:0
  • 评论数:0
  • 支持数:0
  • 反对数:0
个人排行
        博文分类
        日期归档