在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”?因为我问的是与文档中的特定例子有关的疑问,而不仅仅是一般的疑问。


当前回答

val属性类似于Java中的final属性。您只允许为它分配一个值一次。当你第二次尝试给它重新赋值时,你会得到一个编译错误。而var属性是可变的,你可以在你想要的任何时候自由地重新分配它。

其他回答

Var是一个可变变量,可以被多次赋值 val是不可变变量,只能初始化一次。

虽然我迟到了,但有一点我还没发现。你可以使用val在when表达式中赋值一个局部变量,但是尝试使用var会产生编译器错误:

sealed class Token {
    data class StringToken(val value: String) : Token()
    data class BoolToken(val value: Boolean) : Token()
}

fun getToken() : Token = Token.BoolToken(true)

val output = when (val token = getToken()) {
    is Token.StringToken -> token.value
    is Token.BoolToken -> token.value.toString()
}

这允许您访问右边表达式中正确的类型推断值。

在kotlin中,我们可以用两种类型声明变量:val和var。 Val不能重新赋值,它作为最终变量。

val x = 2
x=3 // cannot be reassigned

另一方面,var可以被重新赋值它是可变的

var x = 2
x=3 // can be reassigned

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