「変数は箱」という例え方について

1. 変数とは値を入れる箱のようなものであること
2. 値を別の箱にコピーしても元の箱の内容は変化しないこと
3. 新しい値を箱に入れたら元の内容は消え、新しい情報で上書きされること
http://d.hatena.ne.jp/tonoccho/20090623/1245765236

「変数は箱」っていう例えは昔からよくある言い方だけど、ちょっと違和感があったのでメモ。
「箱を作る」のはオブジェクトの生成で、変数に対するオブジェクトの代入は箱へのラベル付けというイメージで捕える方が無難じゃないかと思う。Javaでいうプリミティブ型の説明としては正しいけど、このままオブジェクトを考えると辛いよねと言いますか。
Javaで言えば、

  • "new Object()"が「箱を作る」
  • "hoge = new Object()"は、「箱を作る」と同時に「ラベルを付ける」。Objectの形の箱を作って、"hoge"という名前を付ける。

そうじゃなければ、「次の段階」の説明でかなり矛盾したことが起こってしまう。グローバル変数まではギリギリ説明出来たとしても、DIとか説明できなくなる心配がある。

まぁ、「次の段階で困っちゃう」ってのは教育の場面ではよくある話で、匙加減が一番難しい部分ですよね。