- PR -

変数の宣言とnew

1
投稿者投稿内容
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2007-11-10 20:30
【1】
ArrayList<String> al = null;
for(int i=0;i<3;i++){
al = new ArrayList<String>();
}

【2】
for(int i=0;i<3;i++){
ArrayList<String> al = new ArrayList<String>();
}

上記【1】と【2】で
【1】はメモリ上にalという入れ物は1個で、その中身を3回空っぽにしている
【2】はメモリ上にalという入れ物を3個別々につくっている
という認識であっていますでしょうか?
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2007-11-11 00:07
引用:

【1】はメモリ上にalという入れ物は1個で、その中身を3回空っぽにしている
【2】はメモリ上にalという入れ物を3個別々につくっている



「空っぽにしている」ではなく「空っぽのArrayListインスタンスを代入している」ですが、だいたい合ってると思います。

ただし、だからと言って【1】の方が効率がいいかというと、そうでもないです。実行時の効率はどちらも同じぐらいであると推測できます。ローカル変数の領域確保はあまりコストがかかりませんので。

コーディングスタイルとしては一般的には【2】の方が好ましいです。変数の生存期間が必要最小限になっているからです。
権兵衛
ベテラン
会議室デビュー日: 2002/09/24
投稿数: 50
投稿日時: 2007-11-12 02:26
どちらもメモリ上に3回領域確保を行っています
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-12 10:02
スコープが違うだけでほとんど同じですね。
forを抜けたあとalを使うのかどうか。
1

スキルアップ/キャリアアップ(JOB@IT)