这会是短路的一个例子吗



如果我要求用户输入一个int,并且在检查该索引处的数组是否为null之前,需要检查它是否在数组的索引范围内,这会是"短路"的例子吗?因为如果数组大小只有5,用户输入15,那么我会得到ArrayIndexOutOfBoundsException。但是,如果我首先检查数字输入是否包含0-4,然后最后检查数组索引,它将保证在0-4之间(包含0-4)。所以我的问题是:这是"短路"的一个例子吗?我会用代码重新表述我所说的。。。

import java.util.Scanner;
public Class Reservation{
    Customer[] customers = new Customer[5];
    Scanner input = new Scanner(System.in);
    //some code
    private void createReservation(){
        System.out.print("Enter Customer ID: ");
        int customerIndex;
        if(input.hasNextInt()){
            customerIndex = input.nextInt();
            //is the if-statement below a short-circuit
            if(customerIndex < 0 || customerIndex >= 5 || customers[customerIndex] == null){
                System.out.print("nInvalid Customer ID, Aborting Reservation");
                return;
            }   
        }
        else{
            System.out.print("nInvalid Customer ID, Aborting Reservation");
        }
    //the rest of the method
    }
}

是的,这是正确使用短路的一个有效例子:

if(customerIndex < 0 || customerIndex >= 5 || customers[customerIndex] == null)

此代码仅在假设||在获得true后立即停止求值的情况下工作,否则,可能会使用无效索引访问customers[customerIndex],从而触发异常。

是的,因为如果从左到右的任何比较都是true,则不需要评估右侧的其余比较。

另一个例子是:

if(node != null && node.value.equals("something"))

在这种情况下,如果node == null,则发生短路,因为&&需要两个true值,并且第一个是false,所以它不评估第二比较。

相关内容

  • 没有找到相关文章

最新更新