ループの中の変数宣言
ゲスト
ゲスト (SSO)
ATOMRSS
  • コード求むID: 127
  • 登録日時:  2007/09/26 11:04
  • 最終更新日時: 2007/12/22 06:52
  • アクセス数: 1511
  • タグ:  java ループ while
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

Javaでループ内でのみ使いたい変数(str1)の宣言についてなのですが、

while(i++ 100) {
  String str1;
  str1 "foo" i;
  System.out.println(str1);
}

とすると、ループの回数分str1の割り当て、開放(?)を行っていてあまり効率がよくないように思えます。

String str1;
while(i++ 100) {
  str1 "foo" i;
  System.out.println(str1);
}

とすると、str1の割り当ては1回で済み、早いような気がします。しかし、変数のスコープが一段広くなってしまいます。

どちらのコーディングがいいのでしょうか?

コメント

最近のコンパイラは優秀なので、それぐらいの内容であれば最適化する際に
ループの外に出してくれるはずです。

なので、人間に理解しやすい前者の方法をオススメしておきます。

GJ

  • ゲスト
  • 2:ゲスト
  • 2007/09/26 12:21

ループで文字列追加するんだったら普通はStringBuffer使うけどなw

  • GoodJob
  • 0

変数str1のスコープが気になるなら、その周りを
中括弧でくくってみるのはどうでしょうか。

{
  String str1;
  while(i++ 100) {
    str1 "foo" i;
    System.out.println(str1);
  }

  • GoodJob
  • 0

  • ゲスト
  • 4:ゲスト
  • 2007/09/26 18:59

最近のコンパイラは文字列の追加を、勝手にStringBufferやStringBuilderに
かえてくれます。
上のほうが自然でいいです。

細かい最適化を最初から考える必要はないです。
もちろん、効率の悪いアルゴリズムと使ってもいいといった話ではありません。

  • GoodJob
  • 0

  • ゲスト
  • 5:ゲスト (SSO)
  • 2007/09/27 00:04

皆さんありがとうございます。
sheileさんの言うとおりにコンパイラの最適化を期待して、上の例を使いたいと思います。

#文字列の追加(連結)に関しては表題とはすこし話が違います。

  • GoodJob
  • 0

  • ゲスト
  • 6:ゲスト
  • 2007/09/29 20:43

String str1; としただけだと、メモリは確保されないので、最適化がなくても中で宣言したほうがいいでしょう。

  • GoodJob
  • 0

  • ゲスト
  • 7:ゲスト
  • 2007/12/22 06:52

for(String str1; i++ 100; ... }
じゃダメなの? 

  • GoodJob
  • 0

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント