java嵌套If或单if

天界:

我对以下代码块(示例)的执行有基本疑问:

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();
dasblinkenlight:

根据我的理解,选项1会产生额外的开销,因为它必须多次评估相同的表达式

是的,将多次拨打这些电话。但是,如果作为条件的一部分进行分配,则可以缩短它,例如:

SoundCard sc;
USB usb;
if(computer != null && (sc = computer.getSoundCard()) != null && (usb = sc.getUSB()) != null) {
    version = usb.getVersion();
}

注意,要引用scusb表达的内部和内部条件是安全的,因为&&评估是保证停止在到达第一false链。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章