次のコードに大きな違いはありますか:
for(int i=0;i<100;i++){
int s =i;
}
と
int s=0;
for(int i=0;i<100;i++){
s =i;
}
次のコードに大きな違いはありますか:
for(int i=0;i<100;i++){
int s =i;
}
と
int s=0;
for(int i=0;i<100;i++){
s =i;
}
次のコードに大きな違いはありますか:
のスコープの違いだけですint s
。以前は、for ループの外では見えませんでした。一方、後者の場合になります。ベスト プラクティスに関する限り、ローカル変数のスコープを可能な限り最小限に抑えるようにしてください。したがって、ループのint s
外側で使用していない場合は、内側でのみ宣言することをお勧めします。for
ループの外で s を使用しない場合は、最初のものを優先します
for(int i=0;i<100;i++){
String s =i;
}
なぜなら
ローカル変数のスコープは常に可能な限り小さくする必要があります
なぜなら
これを除いて、これら2つの間に大きな違いはありません
詳細な回答については、これを確認できますので、スレッド
他の人が述べたように、唯一の機能的な違いはスコープです。ループの外側で宣言された文字列を使用すると、for
ループの外側でアクセスできます。ループ内で宣言され、ループ内でのみアクセスできます。
ただし、これにはもう少しだけ注意が必要です。ループ外で変数にアクセスできるようにすると、ループ外でアクセスする必要があることを意味します。したがって、メソッドの後半でアクセスされない場合、コードの読者は、それを使用するのを忘れたのか、それとも含意が正しくないのかという疑問が生じる可能性があります。したがって、文字列を宣言して、いつ/どこで使用されるかを可能な限り限定してスコープを設定すると、より読みやすくなります。
int
ループの内側を宣言することfor
で、そのスコープはfor
ループによって定義されます。したがって、ループ外では使用できません。さらに、後者の例でのみ再初期化するのではなく、前者のループの各反復で
常に再宣言して初期化しています。変数をループの外で使用する予定がない場合は、前者のアプローチが理にかなっている可能性があります。int
int
は 2 番目のループで表示されるだけでなくs
、さらに重要なことs
に、ループの実行ごとに new がインスタンス化されます。あなたはこれが欲しいかもしれませんし、そうでないかもしれません。新しいインスタンス化にはパフォーマンス コストがかかりますが、ループを抜けたらガベージ コレクションを行い、他の場所にアクセスしようとしない方が安全です。
両方のコードで見られる唯一の違いは、最初の例では String が for ループに対してローカルになることです。2番目の例では、ループ外でも String にアクセスできます。