プログラミング中、私はしばしば以下のシナリオ(コードで説明)に遭遇します。ブロック内の変数を定義します。私はCの背景から来るので可能な限り変数を「ローカル」として定義すると実装が高速になりますか?
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();
はしかし、時々、「清楚」のためにも、私は関係なく、それらが使用されているところの、上部にあるすべての変数を定義したいです。だから私は次のことをする -
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();
"ああ、それはすごくかっこいい"と思う。
ただし、これはコードのパフォーマンスに影響しますか?最初のスタイルは速い実行コードまたは2番目のスタイルにつながりますか?また、そのような場合の条約は何ですか?私はそれが最初のスタイルだと信じています。
コンパイラはこれらが同等であることを観察して、同じバイトコードにコンパイルする可能性があります。 –
コンパイラが意味的に等価でないので、最初のコードを最適化しないと仮定すると、ガベージコレクションは速度の違いをもたらすでしょうか? –
最初に使用される変数の宣言を考慮する必要があります。それは、コードを別の人によって簡単に推論させる。変数宣言が一番上にあり、精神的にそれらをすべて追跡しなければならないということより悪いことはありません。参照のローカリティに関するリンクと最適化コンパイラの(暗黙の)言及についてはhttp://programmers.stackexchange.com/q/56585 –