在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也是一个变量。 如。

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 pi5places = 3.14159,你会把它设置为val。如果你现在或以后需要改变这个变量,那么你会把它设置为var。 例如:一辆车的颜色,可以是var colorCar = green。之后你可以改变colorCar = blue,作为一个val,你不能。 这里关于可变和不可变的回答很好,但是如果这些术语不是很熟悉或者刚刚开始学习如何编程,可能会很可怕。

把val比作final是错误的!

var是可变的,val是只读的;是的,val不能像Java中的final变量一样被重新赋值,但它们可以随着时间的推移返回不同的值,所以说它们是不可变的是错误的;

考虑以下几点

var a = 10
a = 11 //Works as expected
val b = 10
b = 11 //Cannot Reassign, as expected

到目前为止很好!

现在考虑以下关于val的情况

val d
  get() = System.currentTimeMillis()

println(d)
//Wait a millisecond
println(d) //Surprise!, the value of d will be different both times

因此,vars可以对应于Java中的非最终变量,但val也不是最终变量;

虽然kotlin中有类似final的const,因为它们是编译时常量,没有自定义getter,但它们只适用于原语

两者都是变量,唯一的区别是可变变量和不可变变量,没有更多的区别。var是可变变量,val是不可变的。在简单的语言中,var可以在初始化值后改变它的值,val是常量,它不能在初始化值后改变它的值。

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