Java&和&&经营者麻烦

时间:2017-04-16 15:40:29

标签: java exception arraylist boolean operator-keyword

我试图弄清楚为什么&运算符抛出异常并暂停我的程序,但是当我使用&&运算符时,程序没有错误。
以下是代码的一部分:

  • books是对象Book的arraylist。
  • areYouBook如果我要查找的书籍的ISBN匹配true,则会返回a
  • 方法findBook检查我是否已在arraylist中拥有该书。当方法返回null时,表示我必须创建该书并将其添加到ArrayList

非常感谢你的帮助!

public Book findBook(int a){
    int i=0;
    while((i<(books.size()))&!((books.get(i)).areYouBook(a)))
      i++;
    if(i<(books.size())) 
      return books.get(i);
    else
      return null;
}

3 个答案:

答案 0 :(得分:1)

我可以从这里告诉你,&运算符和&&运算符之间的区别在于&&将检查第一个表达式,如果它的计算结果为false,那么它只会从检查中断,但&运算符将运行以下表达式,无论第一个表达式是否为假。

因此,您编写的代码将检查(i<(books.size())),以及结果是否为假,!((books.get(i)).areYouBook(a))仍将执行。

但是,如果您使用&&(i<(books.size()))为false,则检查的第二部分!((books.get(i)).areYouBook(a))将不会被执行。

我希望这会有所帮助。

修改

您提到使用&运算符而不是&&运算符时抛出的错误。由于&运算符确实运行第二个表达式,即使第一个表达式为false,我想知道你的第二个表达式是否实际上是一个错误,并在你使用{时被调用{1}}。

编辑2:

确定。让我们说&的大小为12(索引0-11)仅用于演示。因此,当您使用books运算符时,while循环将一直运行直到&为12.当i为12时,循环执行i(返回false)并且< strong> CONTINUES 执行(i<(books.size()))。在第二个表达式中,当!((books.get(i)).areYouBook(a))为12时,books.get(i)被调用。i列表仅从索引0-11开始,抛出books

答案 1 :(得分:0)

java conditional operators说:

  

运算符&amp;&amp; || 表现出“短路”行为,这意味着仅在需要时才会评估第二个操作数。

如果左侧条件为&&,则逻辑AND运算符false短序列,另一方面,当左侧条件为{{1时永远不会执行右侧条件。

bitwise & operator执行按位AND操作。

答案 2 :(得分:-1)

您尝试使用的逻辑AND由&amp;&amp;&amp;符号即True&amp;&amp; False解析为False。单&符“&amp;”表示按位AND,即0101&amp; 0100解析为0110。