为什么在这里抛出异常?

诺迪尔·纳西罗夫(Nodir Nasirov)

我正在准备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 live2args[1].equals("test")仍然会被评估并引发ArrayIndexOutOfBoundsException异常。

如果您将条件更改为

if (args.length == 1 || args[1].equals("test"))

您将得到Test case打印,因为args.length == 1这是真实的,args[1].equals("test")不会被评估。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF为什么在这里抛出异常?

来自分类Dev

为什么在这里不确定?

来自分类Dev

为什么在这里的盒子?

来自分类Dev

为什么WlanOpenHandle()在这里失败?

来自分类Dev

为什么在这里发生僵局

来自分类Dev

为什么在这里使用锁?

来自分类Dev

为什么$ .isEmptyObject在这里无效

来自分类Dev

为什么python在这里运行?

来自分类Dev

为什么使用原子在这里?

来自分类Dev

为什么在这里需要'break;'?

来自分类Dev

为什么WlanOpenHandle()在这里失败?

来自分类Dev

为什么$ .isEmptyObject在这里无效

来自分类Dev

为什么在这里得到NullPointerException?

来自分类Dev

为什么不会 for ... 在这里循环?

来自分类Dev

为什么python在这里运行?

来自分类Dev

我不知道为什么在这里抛出ArrayIndexOutOfBoundsException

来自分类Dev

为什么 Method.Invoke 会在这里抛出 IllegalArgumentException?

来自分类Dev

为什么awk在这里什么也不做?

来自分类Dev

为什么在这里进行收益优化

来自分类Dev

为什么我的部署检查在这里失败

来自分类Dev

为什么decltype(auto)在这里返回引用?

来自分类Dev

为什么点击事件立即在这里注册?

来自分类Dev

为什么Access在这里要求参数arg?

来自分类Dev

为什么我必须使用窗口。前缀在这里?

来自分类Dev

为什么我的XSLT在这里剥离HTML标签

来自分类Dev

为什么我在这里不为空?

来自分类Dev

NSTime:为什么[NSDateComponent date]在这里返回nil?

来自分类Dev

你为什么要在这里增加?

来自分类Dev

为什么Scrapy在这里找不到href?