var和valKotlin有什么区别?
我已经通过这个链接:
https://kotlinlang.org/docs/reference/properties.html
如此链接所述:
只读属性声明的完整语法与可变的两种方式不同:它以val而不是var开头,不允许使用setter.
但就在有一个使用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
}
Run Code Online (Sandbox Code Playgroud)
var和之间的确切区别是val什么?
为什么我们两个都需要?
这不是Kotlin中Variables 的重复,与Java的差异.var vs val?因为我在询问有关文档中特定示例的疑问,而不仅仅是一般性的.
cha*_*l03 201
在你的代码result没有改变,它的var属性正在改变.请参考以下评论:
fun copyAddress(address: Address): Address {
val result = Address() // result is read only
result.name = address.name // but not their properties.
result.street = address.street
// ...
return result
}
Run Code Online (Sandbox Code Playgroud)
val与finaljava中的修饰符相同.您应该知道我们不能final再次分配给变量但可以更改其属性.
Pat*_*kal 117
val和var两个用于声明的变量.
var就像一般变量,它在kotlin中被称为可变变量,可以多次分配.
val类似于常量变量,在kotlin中称为不可变,只能单次初始化.
有关详细信息val,var请参阅以下链接
use*_*056 21
用var定义的变量是可变的(读和写)
用val定义的变量是不可变的(只读)
Kotlin可以删除findViewById并减少android studio中setOnClickListener的代码.完整参考:Kotlin很棒的功能
可变变量的值可以随时更改,而不能更改不可变变量的值.
我应该在哪里使用var和val?
使用var,其中值经常变化.例如,在获取Android设备的位置时
var integerVariable : Int? = null
Run Code Online (Sandbox Code Playgroud)
使用val,全班的价值没有变化.例如,您需要以编程方式设置textview或按钮的文本.
val stringVariables : String = "Button's Constant or final Text"
Run Code Online (Sandbox Code Playgroud)
小智 15
val用于声明最终变量.val变量的特征
var 是一般变量
我们可以稍后使用lateinit修饰符进行初始化
[ lateinit也用于全局变量我们不能将它用于局部变量]
valin kotlin就像final关键字 一样 java
hus*_*yin 10
简单地说,var(mutable)和val(Java中的不可变值(final modifier))
var x:Int=3
x *= x
//gives compilation error (val cannot be re-assigned)
val y: Int = 6
y*=y
Run Code Online (Sandbox Code Playgroud)
+----------------+-----------------------------+---------------------------+
| | 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; |
+----------------+-----------------------------+---------------------------+
Run Code Online (Sandbox Code Playgroud)
在Kotlin
val中,它是一个只读属性,并且只能由getter访问。val是一成不变的。
val 例如:val piNumber: Double = 3.1415926
get() = field
Run Code Online (Sandbox Code Playgroud)
但是,它
var是读写属性,因此它不仅可以由getter进行访问,还可以由setter进行访问。var是可变的。
var 例如:var gravity: Double = 9.8
get() = field
set(value) {
field = value
}
Run Code Online (Sandbox Code Playgroud)
val,IDE将显示错误:fun main() {
piNumber = 3.14 // ERROR
println(piNumber)
}
// RESULT: Val cannot be reassigned
Run Code Online (Sandbox Code Playgroud)
var可以更改:fun main() {
gravity = 0.0
println(gravity)
}
// RESULT: 0.0
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
小智 7
var就像一般变量一样,可以被多次赋值,在 Kotlin 中被称为可变变量。而val是常量变量,不能多次赋值,只能初始化一次,在 Kotlin 中被称为不可变变量。
\n值: \n分配一次(只读)
\n变量: \n可变
\n示例:\n定义一个变量来存储 userId 值:
\nval userId = 1\nRun Code Online (Sandbox Code Playgroud)\n如果我们尝试更改变量 userId 您将收到错误消息
\nuserId = 2\nerror: val cannot be reassigned // Error message!\nRun Code Online (Sandbox Code Playgroud)\n让\xe2\x80\x99s 创建一个新变量来存储用户名:
\nvar userName = "Nav"\nRun Code Online (Sandbox Code Playgroud)\n如果你想重新分配 userName 的值,你可以轻松地做到这一点,因为 var 是可变的
\nuserName = "Van"\nRun Code Online (Sandbox Code Playgroud)\n现在 userName 的值为“Van”。
\n有关更多信息,请访问:\n https://medium.com/techmacademy/kotlin-101-val-vs-var-behind-the-scenes-65d96c6608bf
\n变量的值val只能分配一次。
val address = Address("Bangalore","India")
address = Address("Delhi","India") // Error, Reassigning is not possible with val
Run Code Online (Sandbox Code Playgroud)
虽然您无法重新分配该值,但您当然可以修改该对象的属性。
//Given that city and country are not val
address.setCity("Delhi")
address.setCountry("India")
Run Code Online (Sandbox Code Playgroud)
这意味着您无法更改变量指向的对象引用,但可以更改该变量的基础属性。
var 变量的值可以根据需要多次重新分配。
var address = Address("Bangalore","India")
address = Address("Delhi","India") // No Error , Reassigning possible.
Run Code Online (Sandbox Code Playgroud)
显然,只要不声明 val,它的底层属性就可以更改。
//Given that city and country are not val
address.setCity("Delhi")
address.setCountry("India")
Run Code Online (Sandbox Code Playgroud)
与val决赛相比是错误的!
vars 是可变的 vals 是只读的;是的,val 不能像 Java 中的 final 变量一样重新分配,但它们可以随着时间的推移返回不同的值,所以说它们是不可变的是错误的;
考虑以下
var a = 10
a = 11 //Works as expected
Run Code Online (Sandbox Code Playgroud)
val b = 10
b = 11 //Cannot Reassign, as expected
Run Code Online (Sandbox Code Playgroud)
所以太好了!
现在考虑以下vals
val d
get() = System.currentTimeMillis()
println(d)
//Wait a millisecond
println(d) //Surprise!, the value of d will be different both times
Run Code Online (Sandbox Code Playgroud)
因此,var 可以对应于 Java 中的非最终变量,但 val 也不完全是最终变量;
尽管const在 kotlin 中可以像final,因为它们是编译时常量并且没有自定义 getter,但它们仅适用于原语
如果我们使用声明变量,val则它将是只读变量。我们无法改变它的价值。就像Java的final变量一样。是。immutable
但是,如果我们使用声明变量,var那么它将是一个我们可以读取或写入的变量。我们可以改变它的价值。是mutable。
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
}
Run Code Online (Sandbox Code Playgroud)
val不能最近通过关键字初始化,lateinit但非基本类型var可以最近通过关键字初始化lateinit。
小智 5
您需要更改变量还是永久设置它?
一个很好的例子,如果它类似于val pi5places = 3.14159,您可以将其设置为val。如果您现在或以后需要更改该变量,那么您可以将其设置为 var。
例如:汽车的颜色可以是var colorCar = green。稍后你可以改变这一点colorCar = blue,而作为一个val,你不能。
这里关于mutable和 的回应immutable很好,但如果这些术语不为人所知或者刚刚开始学习如何编程,可能会很可怕。
| 归档时间: |
|
| 查看次数: |
86805 次 |
| 最近记录: |