在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属性是可变的,你可以在你想要的任何时候自由地重新分配它。

其他回答

正常的

Val用于静态字段,就像Java中的静态关键字一样 类似于Java中的Static /与kotlin中的相同 Var在Kotlin中表示可变字段,你可以改变它。 大多数情况下,当你想要一次性在静态内存中保存值时,就会使用Static,

例子:

 if you assign

 val a=1
 a=3  You can not change it 

你不能改变,这是最终值和静态 var b = 2 b=4你可以改变它

在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)
}

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

简而言之,val variable是final(不可变)或将来不会改变的常量值 而且 Var变量(可变)可以在未来改变。

class DeliveryOrderEvent(val d : Delivery)
// Only getter

请参阅上面的代码。它是一个模型类,将用于数据传递。我在变量之前设置val,因为这个变量是用来获取数据的。

class DeliveryOrderEvent(var d : Delivery)

// setter and getter is fine here. No error

同样,如果你以后需要设置数据,你需要在变量之前使用var关键字,如果你只需要获得一次值,那么使用val关键字

两者都是变量,唯一的区别是可变变量和不可变变量,没有更多的区别。var是可变变量,val是不可变的。在简单的语言中,var可以在初始化值后改变它的值,val是常量,它不能在初始化值后改变它的值。