在Java中,我们不能将一个变量与另一个同名变量声明在同一作用域中:
int someInteger = 3;
...
int someInteger = 13;
语法错误,无法编译。但是,如果我们将其放入循环中:
for (int i = 0; i < 10; i++) {
int someInteger = 3;
}
不会产生任何错误,工作得很好。我们基本上声明了相同的变量。是什么原因?我不知道/理解这背后的逻辑是什么?
这样想,每次循环之后,作用域都被“破坏”,变量也消失了。在下一个循环中,创建一个新的作用域,并且可以在该作用域中再次声明该变量。
出于类似的原因,您也可以这样做
{
int someInteger = 3;
}
{
int someInteger = 13;
}
顺便说一下,Java 不允许局部变量遮蔽,这可能会带来不便
int x = 3;
{
int x = 13; // error!
}
Consumer<Integer> consumer = (x)->print(x); // ERROR!
// lambda parameter is treated like local variable
Runnable r = ()->{ int x; ... } // ERROR
// lambda body is treated like local block
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)