Все объекты гарантированно имеют метод .equals()
, поскольку Object содержит метод, .equals()
, который возвращает логическое значение. Задача подкласса переопределять этот метод, если требуется дополнительное определение определения. Без него (т. Е. С помощью ==
) только адреса памяти проверяются между двумя объектами для равенства. String переопределяет этот метод .equals()
и вместо использования адреса памяти возвращает сравнение строк на уровне символа для равенства.
Ключевое замечание состоит в том, что строки хранятся в одном пуле, поэтому после создания строки он всегда хранится в программе по тому же адресу. Строки не меняются, они неизменяемы. Вот почему это плохая идея использовать регулярную конкатенацию строк, если у вас есть серьезное количество обработки строк. Вместо этого вы будете использовать предоставленные классы StringBuilder
. Помните, что указатели на эту строку могут измениться, и если вам было интересно увидеть, были ли два указателя одинаковыми ==
, это был бы прекрасный способ. Строки сами не делают.
Вы смешиваете параметры JUnit 4 и JUnit Jupiter с параметрами. В JUnit JUpiter нет тестового бегуна, конструктор остается без параметров и вы передаете параметры методу тестирования (в некотором смысле это напоминает теории JUnit 4):
public class SentenceSplitterTest {
private SentenceSplitter sentencesplitter;
private static CollectionClass collectionClass;
// Initialization of CollectionClass moved here (instead of a static block) for two
// reasons:
// 1. If the initialization fails, you can't run the test anyway - better fail
// right here that print an error and continue to the test which we
// know won't work
// 2. It just looks neater
@BeforeAll
public static void initializeCollectionClass() throws IOException {
collectionClass = new CollectionClass();
}
@Before
public void initializeSentenceSplitter() throws IOException {
sentencesplitter = new SentenceSplitter();
}
@ParameterizedTest
@MethodSource("data")
public void testSentenceSplitterTest(DataStructure ds) {
String input = ds.string;
List<String> output = ds.listOfString;
assertEquals(output, sentencesplitter.sentenceSplit(input));
}
public static Stream<DataStructure> data() {
return collectionClass.getContent().stream();
}
}