在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用于创建那些值将在应用程序中随时间变化的变量。它与swift的VAR相同,而VAL用于创建那些值在应用程序中不会随时间变化的变量。它与swift的LET相同。

其他回答

我们使用var来声明变量和 我们使用val来创建在Java中前面带有保留字final的常量

var就像一个通用变量,可以被多次赋值,在Kotlin中被称为可变变量。而val是一个常量变量,不能赋值多次,只能初始化一次,在Kotlin中被称为不可变变量。

瓦尔: 分配一次(只读)

Var: Mutable

例子: 定义一个变量来存储userId值:

val userId = 1

如果我们试图改变变量userId,你会得到错误消息

userId = 2
error: val cannot be reassigned // Error message!

让我们创建一个新变量来存储用户名:

var userName = "Nav"

如果你想重新分配userName的值,你可以很容易地做到这一点,因为var是可变的

userName = "Van"

现在userName的值是“Van”。

欲了解更多信息,请访问: https://medium.com/techmacademy/kotlin-101-val-vs-var-behind-the-scenes-65d96c6608bf

把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,但它们只适用于原语

Val用来声明最终变量。val变量的特征

必须初始化 值不能更改或重新分配

Var是一个一般变量

稍后可以使用lateinit修饰符初始化 lateinit也用于全局变量 我们不能将它用于局部变量] 值可以更改或重新分配,但不能在全局范围内

kotlin中的Val就像Java中的final关键字

Val像常量变量一样,本身不能改变,只能读取,但Val的属性可以修改; Var就像其他编程语言中的突变变量一样。