在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就像一个常量变量,它是可读的,并且val的属性可以被修改。 Var就像一个可变变量。你可以在任何时候改变这个值。

其他回答

和其他语言一样,Var也是一个变量。 如。

var price: Double

另一方面,val提供了引用功能。 如。

val CONTINENTS = 7
// You refer this to get constant value 7. In this case, val acts as access
// specifier final in Java

而且,

val Int.absolute: Int
    get() {
        return Math.abs(this)
    }
// You refer to the newly create 'method' which provides absolute value 
// of your integer

println(-5.absolute) // O.P: 5

val -不可变(初始化后不能重新赋值)

var - Mutable(可以改变值)

例子

在 Kotlin 中 - val n = 20 & var n = 20

在Java - final int n = 20;& int n = 20;

用var定义的变量是可变的(读和写)

用val定义的变量是不可变的(只读)

Kotlin可以在android studio中删除findViewById和减少setOnClickListener的代码。完整参考:Kotlin令人敬畏的特性

可变变量的值可以随时改变,而不可变变量的值不能改变。

哪里用var,哪里用val ?

在值经常变化的地方使用var。例如在获取android设备的位置时

var integerVariable : Int? = null

在整个类的值没有变化时使用val。例如,你想通过编程方式设置文本视图或按钮的文本。

val stringVariables : String = "Button's Constant or final Text"

在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用于setter(值会改变)。

Val用于getter(只读,值不会改变)。