Java:如果条件设置

时间:2014-09-13 06:28:39

标签: java

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

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;
}

本部分的J-Unit测试(不是我创建的),放入 books 4个对象(带构造函数:String title,String author,...)然后测试方法getBook()三次:带作者和标题,标题表达,作者为null,最后一次出现相反情况。

我已经尝试了一些东西,我注意到如果我用逻辑op ==替换所有equals()调用,一切正常。 在Book类中,一切都是正确的,所有的getter和setter都在正确的位置。

那么,为什么我会得到这样的行为,当我多次读到比较Strings with equals()比使用==更好?

1 个答案:

答案 0 :(得分:0)

如果title为null且author不等于列表中的书,则会遇到NullPointerException。第一个if的条件是false,所以你输入else部分和第二个条件如果无法评估,因为在title.equals(books.get(i).getTitle())中标题为null。

如果使用==,则不会发生这种情况,允许将空值与==。

进行比较