当前位置: 首页 > 知识库问答 >
问题:

Java:if条件设置

涂煌
2023-03-14

我正在尝试在书店程序中运行getBook()方法,它允许我找到存储在AL books中的一本书,不仅如果标题和作者是正确的,而且如果其中一个是空的。于是,我写了这段代码:

public Book getBook(String author, String title){
    boolean condOk = false;
    Book book = null;
    if(books!=null){
        for(int i=0; i<books.size(); i++){
            if((author==null && title.equals(books.get(i).getTitle())) || 
                    (author.equals(books.get(i).getAuthor()) && title==null)){
                condOk = true;
                book = books.get(i);
                break;
            } else if(title.equals(books.get(i).getTitle()) &&
                    author.equals(books.get(i).getAuthor())){
                condOk = true;
                book = books.get(i);
                break;
            }
        }
    }
    if(condOk==false) return null;
    else return book;
}

我已经尝试了一些东西,并且我注意到如果我用逻辑op==替换所有的equals()调用,那么一切工作都很好。在书本课上,一切都是正确的,所有的收集器和设置器都在正确的位置。

那么,为什么我会得到这样的行为,当我几次读到用equals()比较字符串比用==做更好的时候?

共有1个答案

傅胡媚
2023-03-14

您会遇到NullPointerException,例如,如果title为null,并且作者不等于列表中的一本书。第一个if的条件为false,因此输入else部分,而第二个if的条件无法计算,因为在title.equals(Books.Get(i).GetTitle())中,标题为null。

如果使用==则不会发生这种情况,允许将null值与==进行比较。

 类似资料:
  • 问题内容: 我有一段代码用a)我纯粹是为了易读而用b)代替了… 一个) b) …交换机版本会在所有排列中级联还是跳到一个案例? 编辑: 下面的一些答案是上述方法的替代方法。 我包括以下内容以提供其使用的上下文。 我问上述问题的原因是,凭经验提高了添加单词的速度。 这绝对不是生产代码,并且作为PoC很快就被黑了。 以下似乎是对思想实验失败的确认。 我可能需要比我目前使用的单词更大的单词集。 失败的原

  • #include <stdio.h> int main(void) { int i = 0; int sum = 0; for (i = 1; i <= 200; i++) { sum += i; } printf("%d\n", sum); return

  • 我有REST用于按名称查找用户,对于某些搜索词,它会返回具有该词的名字或姓氏的用户。 返回json数组: 如何测试这个REST与rest和验证给定的搜索词包含在每一行的名字或姓氏,不区分大小写?

  • 我对Java,JSTL,CSS,JSP······任何与Java相关的和web应用程序世界。同时我也在学习和制作自己的web程序(使用Spring MVC)。 (我的桌子越来越大) 是的,[Q2]是错的,有什么建议吗?感谢!

  • 5.2.10 条件设置字节指令 条件设置字节指令(Set Byte Conditionally)是80386及其以后CPU所具有的一组指令。它们在测试条件方面与条件转移是一致的,但在功能方面,它们不是转移,而是根据测试条件的值来设置其字节操作数的内容为1或0。 条件设置字节指令的一般格式如下: SETnn Reg/Mem;80386+ 其中:nn是表示测试条件的(见表5.4),操作数只能是8位寄存

  • 是否有一些基于条件设置属性的语法? 我希望将express设置为一个值或根本不设置(即,不应该有名为express的键),并且在定义后没有额外的语句。我知道我可以将其用作布尔值,但接收端正在使用一个检查,我想知道是否可以避免修改它。 编辑:似乎没有直接解决上述问题的方法。以下是建议: JSON。stringify(Chris Kessel,dystroy): 匿名函数(Paulpro): 一个额外