在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”?因为我问的是与文档中的特定例子有关的疑问,而不仅仅是一般的疑问。
在Kotlin中,我们使用var来声明变量。它是可变的。我们可以改变,重新分配变量。的例子,
fun main(args : Array<String>){
var x = 10
println(x)
x = 100 // vars can reassign.
println(x)
}
我们使用val来声明常量。它们是不可变的。无法更改,请重新分配值。Val类似于java中的final变量。的例子,
fun main(args : Array<String>){
val y = 10
println(y)
y = 100 // vals can't reassign (COMPILE ERROR!).
println(y)
}
val变量的值只能赋值一次。
val address = Address("Bangalore","India")
address = Address("Delhi","India") // Error, Reassigning is not possible with val
虽然你不能重新赋值,但你可以修改对象的属性。
//Given that city and country are not val
address.setCity("Delhi")
address.setCountry("India")
这意味着您不能更改变量所指向的对象引用,但可以更改该变量的底层属性。
可以根据需要多次重新分配var变量的值。
var address = Address("Bangalore","India")
address = Address("Delhi","India") // No Error , Reassigning possible.
显然,它的底层属性可以被改变,只要它们没有被声明为val。
//Given that city and country are not val
address.setCity("Delhi")
address.setCountry("India")