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

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

最佳答案



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

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

请注意,在表达式内和条件内对scusb的引用都是安全的,因为可以保证&&评估在到达链中的第一个false后停止。

关于java - java嵌套If或单if,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32643048/

10-08 23:25