Kotlin中val name: String? = null与val name: String?的区别是什么?
Kotlin中两种可空字符串声明的差异
这两种声明的核心区别在于是否给变量指定了默认值,在数据类中的表现尤为明显,具体差异如下:
val name: String? = null:显式指定默认null值- 不管是普通类还是数据类,这个只读变量都被明确初始化为null。
- 在数据类的主构造函数中使用时,该参数会带有默认值,创建实例时可以不用传递这个参数,比如:
data class User(val name: String? = null) // 合法调用:User()、User("张三")、User(null) - 在普通类中直接声明是完全合法的,编译器不会报错,因为已经完成了初始化。
val name: String?:仅声明可空类型,无默认值- 在普通类中,这种写法只有在属性是抽象属性(比如抽象类或接口中的声明)时才合法,普通类的非抽象只读属性必须初始化,直接这么写会触发编译错误。
- 在数据类的主构造函数中使用时,该参数没有默认值,创建实例时必须传递该参数,哪怕传的是null,比如:
data class User(val name: String?) // 合法调用:User("李四")、User(null) // 非法调用:User() → 编译器会提示缺少name参数
简单来说,前者给属性加了null默认值,让你在创建实例时更灵活;后者强制你必须给这个属性传值,哪怕是null也得明确传进去。
内容的提问来源于stack exchange,提问作者user13223772
相关产品推荐
相关产品推荐

