短路运算符:提高性能和简化代码

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

NullPointerException大概是最常见的RuntimeException。大量的开发工作花在尝试发现对象是否被赋值上,仅仅是为了检查它是否是null的。要解决这个问题,可以用一个if-null块来保护你的代码。例如:

if(obj != null) {

str = obj.toString( );

}

但是,当被保护的块象下面这样的时候,是有问题的:

if(obj.equals(newobj))

{

....

}

加上保护用的if-null块会变成这样:

if(obj != null) {

if(obj.equals(newobj)) {

....

}

}

当嵌套if块来处理null保护时显得很凌乱,这时可以试一下使用短路运算符。例如布尔“与”运算符,“&&”:

if((obj != null) && obj.equals(newobj) ) {

...

}

“短路”意味着运算符只对必要的部分求值,而不是整个表达式。假如变量“obj”等于null,就不会尝试对“obj.equals(newobj)”子句求值。这就对潜在的NullPointerException提供了保护。

布尔“或”运算符“”也有同样的特性,但它的用法和“与”短路运算相反。它不是当前面的子句取假值时提前中止求值,而是当前面的子句取真值时这样做。例如:

if((number==9) (doAnalysis(number) 〈 20) ) {

....

}

在上面的代码片断中,假如number等于9,它会中止if子句并且不会执行doAnalysis方法。虽然知道这一点很有用,但很可能你在不知道的情况下已经这样做了。

使用“或”短路运算符要注重的最重要的方面,是要确保你按照子句取真值的复杂性和可能性的顺序来排列它们。考虑下面三个子句:

A: 70%的情况下为真

B: 10%的情况下为真,但求值很耗时

C: 5%的情况下为真,但很轻易求值

排列if语句来避免不必要的工作:

if( A C B ) {

...

}

开发者善于利用短路运算符可以提高性能且简化代码。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航