我对以下代码块(示例)的执行有基本疑问:
String version = computer.getSoundcard().getUSB().getVersion();
NullPointerException
如果Soundcard
不存在,可能会抛出该错误。
所以我有 ,
选项1 :
if(computer!=null &&
computer.getSoundCard() !=null &&
computer.getSoundCard().getUSB()!=null) {
version = computer.getSoundcard().getUSB().getVersion();
}
选项2:
if(computer !=null){
SoundCard sc = computer.getSoundCard();
if(sc!=null){
USB usb = sc.getUSB();
if(usb!=null){
version = usb.getVersion();
}
}
}
根据我的理解,选项1会产生额外的开销,因为它必须多次评估同一表达式,例如computer.getSoundCard()
3次,computer.getSoundCard().getUSB()
2次。
我的理解正确吗?
编辑1:从选项2
version = computer.getSoundcard().getUSB().getVersion();
根据我的理解,选项1会产生额外的开销,因为它必须多次评估相同的表达式
是的,将多次拨打这些电话。但是,如果作为条件的一部分进行分配,则可以缩短它,例如:
SoundCard sc;
USB usb;
if(computer != null && (sc = computer.getSoundCard()) != null && (usb = sc.getUSB()) != null) {
version = usb.getVersion();
}
注意,要引用sc
和usb
表达的内部和内部条件是安全的,因为&&
评估是保证停止在到达第一false
链。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句