在Kotlin中var和val的区别是什么?
我已经通过了这个链接:
属性和字段
如本连结所述:
只读属性声明的完整语法不同于
可变1有两种方式:它以val开头,而不是var
不允许设置。
但在此之前有一个使用setter的例子。
fun copyAddress(address: Address): Address {
val result = Address() // there's no 'new' keyword in Kotlin
result.name = address.name // accessors are called
result.street = address.street
// ...
return result
}
var和val的确切区别是什么?
为什么我们两者都需要?
这不是Kotlin中的变量的副本,与Java的区别:'var'和。“val”?因为我问的是与文档中的特定例子有关的疑问,而不仅仅是一般的疑问。
用var定义的变量是可变的(读和写)
用val定义的变量是不可变的(只读)
Kotlin可以在android studio中删除findViewById和减少setOnClickListener的代码。完整参考:Kotlin令人敬畏的特性
可变变量的值可以随时改变,而不可变变量的值不能改变。
哪里用var,哪里用val ?
在值经常变化的地方使用var。例如在获取android设备的位置时
var integerVariable : Int? = null
在整个类的值没有变化时使用val。例如,你想通过编程方式设置文本视图或按钮的文本。
val stringVariables : String = "Button's Constant or final Text"
把val比作final是错误的!
var是可变的,val是只读的;是的,val不能像Java中的final变量一样被重新赋值,但它们可以随着时间的推移返回不同的值,所以说它们是不可变的是错误的;
考虑以下几点
var a = 10
a = 11 //Works as expected
val b = 10
b = 11 //Cannot Reassign, as expected
到目前为止很好!
现在考虑以下关于val的情况
val d
get() = System.currentTimeMillis()
println(d)
//Wait a millisecond
println(d) //Surprise!, the value of d will be different both times
因此,vars可以对应于Java中的非最终变量,但val也不是最终变量;
虽然kotlin中有类似final的const,因为它们是编译时常量,没有自定义getter,但它们只适用于原语