【发布时间】:2012-04-06 22:03:05
【问题描述】:
在编程时,我经常会遇到以下场景(在代码中描述)。我在要使用的块中定义变量。
int maximumLengthOfToken = 0;
while(fileScanner.hasNextLine())
{
String line; // definition
line = fileScanner.nextLine();
Scanner lineScanner; // definition
lineScanner = new Scanner(line);
String token = lineScanner.next(); // definition and assignment
if(stringToMatch.endsWith(token))
{
if(token.length() >= maximumLengthOfToken )
{
maximumLengthOfToken = token.length();
builder.append(line);
builder.append("\n\n\n");
}
}
}
fileScanner.close();
但是,有时,为了“整洁”,也因为我来自 C 背景,我喜欢在顶部定义所有变量,而不管它们在哪里使用。所以我做了以下 -
int maximumLengthOfToken = 0;
String line; // definition
Scanner lineScanner; // definition
String token; // definition
while(fileScanner.hasNextLine())
{
line = fileScanner.nextLine();
lineScanner = new Scanner(line);
token = lineScanner.next(); // definition
if(stringToMatch.endsWith(token))
{
if(token.length() >= maximumLengthOfToken )
{
maximumLengthOfToken = token.length();
builder.append(line);
builder.append("\n\n\n");
}
}
}
fileScanner.close();
“啊!看起来很整洁”,我想。
但是,这对代码的性能有什么影响吗?第一种风格会导致更快的代码执行还是第二种风格?另外,在这种情况下,约定是什么?我相信这是第一种风格。
【问题讨论】:
-
编译器可能会观察到它们是等价的,从而将它们编译为相同的字节码。
-
假设编译器没有考虑语义等价性并因此没有优化第一段代码,垃圾收集是否会在此处产生速度差异?
-
您应该考虑在变量第一次使用的地方声明它们。它使代码更容易被其他人推理。没有什么比在顶部看到一堆变量声明并不得不在心里跟踪它们更糟糕的了。另见programmers.stackexchange.com/q/56585
标签: java performance coding-style