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

在文档中, val分配一次(只读)局部变量 。 但是,下面是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 

范围构造中使用的x是阴影val x = 6 – 在两个不同的范围内是两个不同的变量。

你可以通过以下方式看到自己:

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

最后的呼叫将打印原始值 – 6