我正在尝试在书店程序中运行一个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()比使用==更好?
答案 0 :(得分:0)
如果title为null且author不等于列表中的书,则会遇到NullPointerException
。第一个if的条件是false,所以你输入else部分和第二个条件如果无法评估,因为在title.equals(books.get(i).getTitle())
中标题为null。
如果使用==,则不会发生这种情况,允许将空值与==。
进行比较