無駄なnewをしない
こんなプログラムを見かけた
List
list = getList();
getList()は別な場所で定義されているものとする
一方私の書くプログラムはこんな感じ
List
上のプログラムを書いた人は
下のプログラムを見てなぜ初期化せずに動くのか?
という疑問をもったらしい
今日はなぜかについて語ることにしよう
まず上のプログラムについて考える
new ArrayList
でArrayListのインスタンスを生成し
その参照先をlist変数に格納する
次にgetList()について考える
このクラスはList
メソッド内部でListのインスタンスが生成される
次に考えるのgetListでreturnされるものである
メソッド内では生成したインスタンスの参照先を
格納した変数が用意され、それがreturnされる
したがって戻ってくる値は参照先がどこにあるかという情報で
実際のインスタンスは同一のものを参照することになる
さて、ここで戻り値を格納する変数である
呼び出し元のlist変数を利用している
ここに参照先が格納される
その結果、listの値が書き換えられすでにnewしたArrayListを参照する
変数がなくなる
ここまでおわかりいただけただろうが
ArrayListは無駄な変数となってしまったわけである
めでたしめでたし〜〜