Я пытаюсь запустить метод getBook() в программе Bookstore, которая может позволить мне найти книгу, хранящуюся в книгах , не только в том случае, если заголовок и автор верны, но и если один из они равны нулю. Итак, я написал этот код:Java: если условия установлены
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 (не создана мной) этой части, ставит в книг 4 объектов (с конструктором: Строка заголовка, строка автора, ...), а затем три раза проверяет метод getBook(): с автором и заголовком, с выражением заголовка и автором null, и в последний раз с противоположной ситуацией.
Я уже что-то пробовал, и заметил, что если я заменю все вызовы equals() логическим оператором op ==, все будет хорошо. В классе книги все правильно, все геттеры и сеттеры находятся в нужном месте.
Итак, почему я получаю такое поведение, когда несколько раз я читал, что сравнение строк с equals() лучше, чем выполнение с ==?
«Если я заменяю все вызовы equals() логическим оператором op ==, все работает нормально» - кажется более вероятным, что оператор является неправильным выводом, потому что 'equals' * является * правильным методом для сравнения значения разные строки. Для ссылочных типов 'a == b' возвращает true только тогда, когда a и b являются * одинаковыми * экземплярами. – user2864740
Что вы подразумеваете под словом «equals is broken»? –
@ user2864740 Не обязательно. В этом случае используются ссылки на те же строковые константы. Вот почему он отлично работает – ponomandr