Val和Var在Kotlin

varval在Kotlin之间有什么区别?

我已经通过这个链接:

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 } 

varval什么区别?

为什么我们需要两个?

不是 Kotlin中variables 的重复 ,与Java的区别。 var vs val? 因为我正在质疑与文件中的特定示例有关的疑问,而不仅仅是一般。

在你的代码中, 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 } 

val和java中的final修饰符是一样的。 正如你应该知道的,我们不能再次分配给finalvariables,但可以改变它的属性。

valvar都用来声明一个variables。

var就像通用variables,它在kotlin中被称为可变variables,可以被分配多次。

val就像常量variables,它在kotlin中被称为不可变的,并且只能被初始化一次。

有关更多信息什么是valvar请参阅下面的链接

http://blog.danlew.net/2017/05/30/mutable-vals-in-kotlin/

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

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

Kotlin可以删除findViewById并减lessandroid studio中setOnClickListener的代码。 充分的参考: Kotlin真棒function

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

我应该在哪里使用var和val?

使用var值经常改变。 例如,当获取Android设备的位置

 var integerVariable : Int? = null 

在全class价值没有变化的地方使用val。 例如,你想以编程方式设置文本视图或button的文本。

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

简单地说,var(mutable)和val(像Java中的不可变值(final修饰符))

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

val是immutable ,var在Kotlin中是mutable的。

val用来声明finalvariables。 valvariables的特征

  1. 必须初始化
  2. 价值不能改变或重新分配 在这里输入图像说明

var是一个普通variables

  1. 稍后我们可以使用lateinit修饰符进行初始化

    [ lateinit也用于全局variables,我们不能用它作为局部variables]

  2. 价值可以改变或重新分配,但不在全球范围内

在这里输入图像说明

valkotlin就像java final关键字

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

但是,如果我们使用var声明variables,那么它将是一个我们可以读取写入的variables。 我们可以改变它的价值。

 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 } 

在这个例子中, result被声明为地址types的val 。 所以,我们不能改变它的价值。 但是我们改变它的属性值。 那些必须被声明为var

你可以很容易地认为它是:

var用于setter(值将会改变)。

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

简单的认为Val就像java中的finalvariables一样

伟大的文章,以了解val和var在kotlin

http://blog.danlew.net/2017/05/30/mutable-vals-in-kotlin/ – dan lew

你需要改变一个variables还是永久设置? 一个很好的例子,如果它是像“val pi5places = 3.14159”你可以设置为val。 是否有可能需要现在或以后更改该variables,然后将其设置为var。 例如,一辆汽车的颜色,可以是“var colorCar = green”。 稍后,您可以更改colorCar =蓝色,作为一个val,你不能。

这里关于mutable和immutable的回答是好的,但是如果这些术语不是很清楚,或者只是学习如何编程,可能会很吓人。

var是一个像任何其他语言的variables。 例如。

 var price: Double 

另一方面,val提供了引用的function。 例如。

 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) // OP: 5