for范围中的`val`不是不可变的?

时间:2017-08-15 11:41:03

标签: kotlin

在文档中,val assign-once(只读)本地变量。但是,下面是一个for循环,它将值分配给x几次。这是一个与C ++ const不同的概念吗?

fun main(args: Array<String>) {
    val x = 6
    val y = 9
    for (x in 1..y) {
        println("fits in range $x")
    }
}

输出:

fits in range 1
fits in range 2
fits in range 3
fits in range 4
fits in range 5
fits in range 6
fits in range 7
fits in range 8
fits in range 9

1 个答案:

答案 0 :(得分:5)

范围构造中使用的x遮蔽了val x = 6 - 这是两个不同范围内的两个不同变量。

你可以通过写作来看到自己:

val x = 6
val y = 9
for (x in 1..y) {
    println("fits in range $x")
}

println(x)

最后一次通话将打印原始值 - 6