Java研修三日目

JAVA言語にはポインタのようなものは存在しないらしい。(こういう言い回しはたぶん間違ってると思うのだが。NullPointerExceptionあるし。)
http://wisdom.sakura.ne.jp/programming/java/java23.html


言語仕様上、プリミティブ型の変数は必ず値渡しとなる。
それ以外のもの、配列及びオブジェクト(クラス型)などは参照渡しとなる。


Stringクラスは定数文字列を扱い、その実態はChar型の配列。
Stringクラスもオブジェクトなので、ポインタを示しているに過ぎない。

String str; //①
str = "あいうえお"; //②
str = "かきくけこ"; //③

とした場合、
①でメモリ領域確保
②でメモリ領域へ値の書き込み
③で②とは別のメモリ領域へ書き込み、strのポインタ(「あいうえお」へのポインタ)を、「かきくけこ」へのポインタに書き換えている。
で、最初の領域に書き込まれてる情報(「あいうえお」)は、GCによる削除を待つ。


こんな理解で良いのかな?