以下代码之间是否有任何显着差异:
for(int i=0;i<100;i++){
int s =i;
}
和
int s=0;
for(int i=0;i<100;i++){
s =i;
}
答案 0 :(得分:6)
以下代码之间是否有任何显着差异:
int s
范围的差异。在前者中,它在for循环之外是不可见的。然而,它将在后一种情况下。就最佳实践而言,您应尽可能尽量减少局部变量的范围。因此,如果您没有在int s
循环之外使用for
,那么最好只在内部声明它。
答案 1 :(得分:2)
如果在循环之外没有使用s,那么我更喜欢第一个
for(int i=0;i<100;i++){
String s =i;
}
由于
局部变量的范围应始终尽可能小
因为
除此之外,这两者之间没有重大差异
有关详细答案,您可以查看this so thread
答案 2 :(得分:0)
通过在int
循环内声明for
,其范围由for
循环定义。因此,它不会在循环之外可用。
另外,您在前一循环的每次迭代中不断重新声明和初始化int
,而不是仅重新初始化{ {1}}在后一个例子中。如果你不打算在循环之外使用变量,那么前一种方法可能有意义。
答案 3 :(得分:0)
第一个更好。程序员知道变量不会影响外部作用域中的其他内容。
编译器也很容易知道它可以进行一些优化,例如
void foo()
{
for(int i=0;i<100;i++)
{
String s = ""+i;
}
for(int i=0;i<100;i++)
{
Long x = i;
}
}
s
和x
只需要一个本地堆栈广告位,因为同时永远不需要s
和x
。
如果s
和x
在外部范围内,编译器就不那么明显了
void foo()
{
String s;
Long x;
for(int i=0;i<100;i++)
{
s = ""+i;
}
for(int i=0;i<100;i++)
{
x = i;
}
}
答案 4 :(得分:0)
正如其他人所提到的,唯一的功能差异是范围。使用在for
循环之外声明的字符串,可以在循环外部访问它。在循环内声明,它只能在循环内访问。
然而,还有更多内容:当您在循环外部访问变量时,您暗示需要在循环外部访问。因此,如果以后在方法中不访问,则可能会在您的代码的读者心中提出一个问题,即您是否忘记使用它,或者隐含是否错误。因此,如果您声明字符串以使其范围受限于可以使用它的时间/位置,那么它就更具可读性。
答案 5 :(得分:-1)
是的,你在第二个实例中使用相同的实例,更好。
答案 6 :(得分:-2)
我在两个代码中看到的区别仅在于,在第一个示例中,String s将是for循环的本地。在第二个例子中,String也可以在循环之外访问。
答案 7 :(得分:-2)
s
不仅仅在第二个循环中可见,更重要的是,每次循环运行时都会实例化s
。你可能想要这个,你可能不会。新的实例化会有一个性能成本,但是如果你想确保它在离开循环时被垃圾收集并且你没有尝试在其他地方访问它,那么它会更安全。