data class
 
-  自动生成常用方法: - data class会自动生成- equals(),- hashCode(),- toString(),- copy()方法和- componentN()函数。
- 这些方法在数据类中非常有用,简化了代码。
 
-  主要用于存储数据: - data class主要用于存储数据,即它们通常是只包含属性和简单方法的类。
 
-  声明方式: - data class的声明方式为- data class ClassName(val property1: Type, val property2: Type, ...)
 
-  例子: data class User(val name: String, val age: Int)
普通 class
 
-  不自动生成常用方法: - 普通类不会自动生成 equals(),hashCode(),toString(),copy()方法和componentN()函数。
- 如果需要这些方法,需要手动实现。
 
- 普通类不会自动生成 
-  更通用: - 普通类更通用,可以包含更复杂的逻辑,不只是用于存储数据。
 
-  声明方式: - 普通类的声明方式为 class ClassName
 
- 普通类的声明方式为 
-  例子: class User(val name: String, val age: Int)
比较
| 特性 | data class | 普通 class | 
|---|---|---|
| 用途 | 主要用于存储数据 | 通用用途,适合包含复杂逻辑的类 | 
| 自动生成方法 | equals(),hashCode(),toString(),copy(),componentN() | 不自动生成,需要手动实现 | 
| 声明方式 | data class User(val name: String, val age: Int) | class User(val name: String, val age: Int) | 
| 代码简洁性 | 简化了数据类的实现,减少样板代码 | 需要更多的手动实现 | 
示例
以下是一个完整的示例,展示了 data class 和普通 class 的区别:
// Data class example
data class User(val name: String, val age: Int)fun main() {val user1 = User("Alice", 25)val user2 = User("Alice", 25)println(user1) // 自动生成的 toString() 方法println(user1 == user2) // 自动生成的 equals() 方法println(user1.copy(age = 26)) // 自动生成的 copy() 方法
}// Regular class example
class User(val name: String, val age: Int) {override fun toString(): String {return "User(name='$name', age=$age)"}override fun equals(other: Any?): Boolean {if (this === other) return trueif (other !is User) return falseif (name != other.name) return falseif (age != other.age) return falsereturn true}override fun hashCode(): Int {var result = name.hashCode()result = 31 * result + agereturn result}
}fun main() {val user1 = User("Alice", 25)val user2 = User("Alice", 25)println(user1) // 自定义的 toString() 方法println(user1 == user2) // 自定义的 equals() 方法
}