在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 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关键字

其他回答

在Kotlin中,我们有两种类型的变量:var或val 可在初始化后更新的可变引用(读写)。var 关键字用于定义Kotlin中的变量。它相当于一个普通的(非final) Java变量。如果我们的变量在某个时候需要改变,我们应该这样做 使用var关键字声明它。让我们看一个变量的例子 声明:

 fun main(args: Array<String>) {
     var fruit:String = "orange"  // 1
     fruit = "banana"             // 2
 }

我们试试这种方法。

Val is a Immutable constant 
    val change="Unchange" println(change)
    //It will throw error because val is constant variable
    // change="Change" 
    // println(change)
Var is a Mutable constant
    var name: String="Dummy"
    println(name)
    name="Funny"
    println(name)

瓦尔: 必须添加或初始化值,但不能更改。 var: 它的变量可以在代码中的任何一行中更改。

简单地说, var(可变的)和val(在Java中不可变的值(最终修饰符))

var x:Int=3
x *= x

//gives compilation error (val cannot be re-assigned)
val y: Int = 6
y*=y

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

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

Var是一个一般变量

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

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