我正在准备OCA考试并阅读很多东西,所以今天我看到了一个问题。这是一个代码:
public class Fork {
public static void main(String[] args) {
if (args.length == 1 | args[1].equals("test")) {
System.out.println("Test case");
} else {
System.out.println("production " + args[0]);
}
}
}
和命令行调用:
java Fork live2
我以为答案是,"production java"
但答案是"An exception is thrown at runtime"
。这是为什么?我们正在为args提供值吗?有人可以解释一下这是怎么回事吗?谢谢!
在java Fork live2
这里只有1命令行参数- live2
。
args.length == 1 | args[1].equals("test")
是一个不会短路的“或”运算符,这意味着保证两个操作数都将被求值(||
是一个“ OR”运算符,它短路并且仅在左操作数为false时才评估右操作数),因此,如果您提供一个命令行就像您在中所做的一样java Fork live2
,args[1].equals("test")
仍然会被评估并引发ArrayIndexOutOfBoundsException
异常。
如果您将条件更改为
if (args.length == 1 || args[1].equals("test"))
您将得到Test case
打印,因为args.length == 1
这是真实的,args[1].equals("test")
不会被评估。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句