我了解到了
'val'是分配一次且永不改变的变量,只有val的状态改变。
据我所知
val无法多次定义。
但是当我执行以下代码(看起来像套接字消费者)
时while (is.read(buf) > 0) {
val input = new String(buf)
println(input)
}
println(input)
每次迭代显示不同的行。怎么会发生这种情况?
看起来input
经常是新定义的,或者input
不是新定义的,只是多次修改过。
鉴于val
无法改变,这怎么可能?
答案 0 :(得分:3)
分配给val
的对象无法替换
input
仅在while
循环的范围内定义,因此在每次迭代中都会被销毁并再次声明。
while (is.read(buf)>0)
{
val input = new String(buf) // declared afresh in every iteration
println(input)
} // input is destroyed when you reach here
println(input) // input is not defined in this scope
答案 1 :(得分:1)
那是因为你已经在循环中初始化了val。每次循环运行时,旧的val都会被取消范围,并使用新值创建一个新的val。