在样式或性能方面,在循环内或外部定义变量是否更好?
例如:
int var;
for (...) {
var = /*something*/;
// Code that uses var
}
或
for (...) {
int var = /*something*/;
// Code that uses var
}
如果您对变量声明如何在内部工作有任何见解,以及其中一个声明如何比另一个更好(即使它只是稍微有点),请分享。在表演之外,哪种风格更受欢迎?
答案 0 :(得分:5)
for(int i = 0; i < array.length; i++) {
final String variable = array[i];
}
String variable;
for(int i = 0; i < array.length; i++) {
variable = array[i];
}
for(final String variable : array) {
}
运行以下测试。运行大约需要30秒。结果表明,在循环内部或外部定义变量之间的性能没有差异。这很可能是由于编译器优化。 YMMV。
final double MAX = 1e7;
long start = System.nanoTime();
String var1;
for(double i = 0; i < MAX; i++) {
var1 = UUID.randomUUID().toString();
}
System.out.println((System.nanoTime() - start) / 1e9);
start = System.nanoTime();
for(double i = 0; i < MAX; i++) {
final String var2 = UUID.randomUUID().toString();
}
System.out.println((System.nanoTime() - start) / 1e9);
答案 1 :(得分:1)
您应该仅为for循环标头定义for循环初始化变量,这限制了它在循环中的范围。如果您担心性能,那么您应该在循环中定义变量。
只有在循环外使用该变量的值时才定义变量外循环。
答案 2 :(得分:1)
那么,取决于主要如何使用变量,如果要在循环中定义变量,则需要在第一次使用变量之前初始化变量。循环运行时,变量将被重新初始化为此值。
另一方面,如果你想在循环中的不同运行中变量值保持,那么你必须在外面声明它。我不认为表演和风格可能是这里的主要标准。
答案 3 :(得分:0)
如果你在for循环中声明变量,你将无法在循环外部访问它。
for (...) {
int var = /*something*/;
// Code that uses var
}
你不能在循环外访问var。
int var;
for(...) {
var = /*something*/;
// Code that uses var
}
var可以在循环外访问。任何其他类代码都可以使用for循环中设置的var值。
这一切都取决于您的要求。
答案 4 :(得分:0)
你应该尝试将变量移出循环外的唯一一次,即使它从未在循环之外使用过,如果你可以重用一个对象,并避免在循环的每次迭代中使用new
。
StringBuilder builder = new StringBuilder();
for(...) {
builder.append(..);
builder.append(..);
strings[i] = builder.toString();
// reset builder, to be used again
builder.setLength(0);
}
这比每次创建一个新的StringBuilder更有效。
在所有其他情况下,如果可以,您应该更喜欢在循环内声明变量