在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和var都可以用于声明变量(局部和类属性)。

局部变量:

Val声明只读变量,只能赋值一次,但不能重新赋值。

例子:

val readonlyString = “hello”
readonlyString = “c u” // Not allowed for `val`

var声明了你在Java中知道的可重赋变量(Java 10中将引入关键字“局部变量类型推断”)。

例子:

var reasignableString = “hello”
reasignableString = “c u” // OK

使用val总是更可取的。尽量避免使用var !

类的属性:

这两个关键字还用于在类中定义属性。作为一个例子,看看下面的数据类:

data class Person (val name: String, var age: Int)

Person包含两个字段,其中一个字段是只读(name)。另一方面,年龄可以在类实例化后通过提供的setter重新赋值。注意,name没有相应的setter方法。

其他回答

用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"

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

如果我们使用val声明变量,那么它将是只读变量。我们不能改变它的值。它就像Java的最终变量。它是不可变的。

但如果我们使用var声明变量,那么它将是一个我们可以读或写的变量。我们可以改变它的值。这是可变的。

data class Name(val firstName: String, var lastName: String)

fun printName(name: Name): Name {
    val myName = Name("Avijit", "Karmakar") // myName variable is read only
    // firstName variable is read-only. 
    //You will get a compile time error. Val cannot be reassigned.
    myName.firstName = myName.firstName
    // lastName variable can be read and write as it's a var.
    myName.lastName = myName.lastName
    return myName
}

Val不能最近通过关键字lateinit初始化,但非原始变量可以最近通过关键字lateinit初始化。

+----------------+-----------------------------+---------------------------+
|                |             val             |            var            |
+----------------+-----------------------------+---------------------------+
| Reference type | Immutable(once initialized  | Mutable(can able to change|
|                | can't be reassigned)        | value)                    |
+----------------+-----------------------------+---------------------------+
| Example        | val n = 20                  | var n = 20                |
+----------------+-----------------------------+---------------------------+
| In Java        | final int n = 20;           | int n = 20;               |
+----------------+-----------------------------+---------------------------+

参考

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

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