我有一个关于作用域规则的非常基本的问题。当你在循环内部声明一个变量时,比如说:
while ( /*some condition*/ )
{
int a = 0;
//Remaining operations
}
在循环的每次迭代中,是否会声明一个新的int
变量?还是说a
在每次迭代结束时被销毁并重新创建?Java或C++编译器如何理解和实现这个过程?
X a(0);
其中 X 是一个类,则构造函数将在每次迭代开始时被调用,并且析构函数将在每次迭代结束时被调用。除非编译器可以确定“调用构造函数和析构函数不会做任何事情”。 - Mats Petersson while(//Some Condition)
会注释掉右括号,因此代码无法运行
请将其更正为:
会注释掉右括号,因此代码无法运行。
while(/* some condition */)
我认为将 a
视为一个被反复创建和销毁的相同变量更容易理解。
这个变量只在源代码中声明,字节码中它只是使用了栈上的一个局部变量,该变量每次迭代都会被初始化为0。与循环外声明的区别在于,当它在循环内部时,JVM将重用变量a
占用的位置。
a
都会被创建并销毁。
int
变量通常会被编译器分配到一个寄存器中。 - chrylis -cautiouslyoptimistic-