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