3

次のコードに大きな違いはありますか:

for(int i=0;i<100;i++){
   int s =i;
}

int s=0;
for(int i=0;i<100;i++){
   s =i;
}
4

7 に答える 7

6

次のコードに大きな違いはありますか:

のスコープの違いだけですint s。以前は、for ループの外では見えませんでした。一方、後者の場合になります。ベスト プラクティスに関する限り、ローカル変数のスコープを可能な限り最小限に抑えるようにしてください。したがって、ループのint s外側で使用していない場合は、内側でのみ宣言することをお勧めします。for

于 2013-07-09T16:20:31.410 に答える
2

ループの外で s を使用しない場合は、最初のものを優先します

for(int i=0;i<100;i++){
   String s =i;
}

なぜなら

ローカル変数のスコープは常に可能な限り小さくする必要があります

なぜなら

  • これにより、コードの理解、デバッグ、およびリファクタリングが容易になります。
  • どちらの場合も、これらの変数に必要なメモリは非常に小さいです。

これを除いて、これら2つの間に大きな違いはありません

詳細な回答については、これを確認できますので、スレッド

于 2013-07-09T16:22:21.590 に答える
0

他の人が述べたように、唯一の機能的な違いはスコープです。ループの外側で宣言された文字列を使用すると、forループの外側でアクセスできます。ループ内で宣言され、ループ内でのみアクセスできます。

ただし、これにはもう少しだけ注意が必要です。ループ外で変数にアクセスできるようにすると、ループ外でアクセスする必要があることを意味します。したがって、メソッドの後半でアクセスされない場合、コードの読者は、それを使用するのを忘れたのか、それとも含意が正しくないのかという疑問が生じる可能性があります。したがって、文字列を宣言して、いつ/どこで使用されるかを可能な限り限定してスコープを設定すると、より読みやすくなります。

于 2013-07-09T16:27:50.153 に答える
0

intループの内側を宣言することforで、そのスコープはforループによって定義されます。したがって、ループ外では使用できません。さらに、後者の例でのみ再初期化するのではなく、前者のループの各反復で

常に再宣言して初期化しています。変数をループの外で使用する予定がない場合は、前者のアプローチが理にかなっている可能性があります。intint

于 2013-07-09T16:22:35.140 に答える
-2

は 2 番目のループで表示されるだけでなくs、さらに重要なことsに、ループの実行ごとに new がインスタンス化されます。あなたはこれが欲しいかもしれませんし、そうでないかもしれません。新しいインスタンス化にはパフォーマンス コストがかかりますが、ループを抜けたらガベージ コレクションを行い、他の場所にアクセスしようとしない方が安全です。

于 2013-07-09T16:27:28.407 に答える
-2

両方のコードで見られる唯一の違いは、最初の例では String が for ループに対してローカルになることです。2番目の例では、ループ外でも String にアクセスできます。

于 2013-07-09T16:25:26.180 に答える