【发布时间】:2017-08-13 06:30:11
【问题描述】:
函数范围对我来说很有意义,因为局部变量的生命周期 == 它的可见性,但我对 块范围
有点不确定看看这个java代码:
public static void main(String[] args) {
int j;
{ // block A
int i;
}
{ // block B
int i;
}
}
- 调用函数时,所有三个变量都在调用堆栈上分配空间?即使
i在块外不可访问,但在函数返回之前它不会被删除? (如果在block终止后删除,如何实现?如果模仿调用堆栈,我们将无法访问j...) - 如果1为真,编译时Java需要给每个作用域一个命名空间,然后再放入符号表中? (类似于 blockA.i = sp+4,blockB.i = sp+8)。如果1 为假,我想它只是解决了名称冲突问题
-
int j;{int j;}在 Java 中是不允许的,编译器是否还需要检查当前符号表中是否存在冲突(重命名之前)? (我知道C++ 允许这样做)
【问题讨论】: