В чем разница между нормальным классом и классом данных в котлине

Я попытался решить Котлин Коан при задании №6 (DataClass). Когда я использовал нормальный класс в коде, тестовым случаем становится Failure.

Вот мой код класса данных:

data class Person(val name: String, val age: Int) fun task6(): List<Person> { return listOf(Person("Alice", 29), Person("Bob", 31)) } 

Вот результат класса данных:

 [Person(name=Alice, age=29), Person(name=Bob, age=31)] 

Вот мой код нормального класса:

 class Person(val name: String, val age: Int) fun task6(): List<Person> { return listOf(Person("Alice", 29), Person("Bob", 31)) } 

Вот результат нормального класса:

 [i_introduction._6_Data_Classes.Person@4f47d241, i_introduction._6_Data_Classes.Person@4c3e4790] 

Это среднее значение имеет разницу между нормальным классом и классом данных в котлин. Так что это?

Обновлено :

Спасибо @Mallow, вы правы. Та работа:

 class Person(val name: String, val age: Int) { override fun toString(): String { return "Person(name=$name, age=$age)" } } fun task6(): List<Person> { return listOf(Person("Alice", 29), Person("Bob", 31)) } 

для класса данных.

Компилятор автоматически выводит следующие члены из всех свойств, объявленных в основном конструкторе:

equals () / hashCode (),

toString () формы «Пользователь (имя = Джон, возраст = 42)»,

componentN (), соответствующие свойствам в порядке их объявления,

copy () (см. ниже).

см. https://kotlinlang.org/docs/reference/data-classes.html

В большинстве случаев разработчики используют класс для хранения только данных в классах, тогда как другие вещи (например, несколько методов по умолчанию и некоторые другие реализации) также занимают пространство в памяти. Это просто трата ресурсов.

Из официальной документации:

Мы часто создаем класс, чтобы ничего не делать, кроме как хранить данные. В таком классе некоторые стандартные функции часто механически выводятся из данных. В Котлине это называется классом данных и помечено как data .

Компилятор автоматически выводит следующие члены из всех свойств, объявленных в основном конструкторе:

  • equals () / hashCode (),
  • toString () формы «Пользователь (имя = Джон, возраст = 42)»,
  • componentN (), соответствующие свойствам в порядке их объявления,
  • copy () (см. ниже). Если какая-либо из этих функций явно определена в теле класса или унаследована от базовых типов, она не будет сгенерирована.

Чтобы узнать больше, проверьте классы данных

О результате, технически , вы получаете отличается от реализации метода toString() . Метод data class toString() использует свойства и значения класса данных для формирования возвращаемой строки. Метод общего класса ' toString() использует хэш-код для формирования возвращаемой строки.