java:「参照」とは何か?

 

機器が高度になればなるほど、その中身はブラックボックスになります。
つまり、仕組みは分からないけれど、ボタンを押すと得たい結果が得られる
魔法の箱になるのです。

毎度、管理人イガジーです。

ブラックボックスの中身、その仕掛けを知りたいと思う人は、
今では少ないのかもしれませんが、プログラミングを多少なりとも
経験すると、少しずつパソコンのカラクリがわかってきます。

パソコン(コンピュータ)の構成要素のひとつに、メモリがあります。
メモリには、番地(アドレス)が割り振られていて、そこにプログラムや
データが格納されます。

例えば、String str="hello";というプログラムを書くと”hello”というデータとstrという変数領域が
メモリのある番地(アドレス)に格納されます。
strという変数は、”hello”というデータ(オブジェクト=実体)が
格納されている番地(アドレス)を指し示しているのです。

strという変数そのものには、”hello”が入っているのではなく、
“hello”というデータが格納されている番地(アドレス)が入っているのです。
これを「参照」と呼びます。
※ C言語を知っている人には、参照=ポインタと言う説明が
分かりやすいかもしれません。
※※ ただし、Javaの参照は、ポインタと異なり、+1などして参照先をずらす
(変更する)事はできません。

String str1="hoge";
String str2="hoge";

と書くと、”hoge”の実体(オブジェクト)が生成されて
str1 にその番地(アドレス)が入ります。
str2 用にもうひとつ”hoge”の実体が生成されるのか?と思いきや
同じ実体になるので、str2にも、str1で生成された”hoge”の番地が入ります。
※ コンパイル時(Eclipseでは「保存」した時)に、”hoge”の実体を
2個作らないで済むように最適化されます。

従って、str1 と str2 は、同じ番地を指すことになるので
str==str2 は true(真) になります。

ところが、TextFieldなどでの入力を受けて、String str3=getText(textfield);した場合は、新たに実体が作りだされ、str3はそれを指すようになります。
たとえ、”hoge”と入力しても、別の実体(オブジェクト)になるのです。
ですから、str1==str3 は false(偽)になります。番地(参照)が別モノになるからです。

中身(実体)の比較をするには、str1.equals(str3) と、equals()メソッドを使います。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)