よくJavaにはポインタがないのでC言語よりもわかりやすい
という人をよく見かける。
確かに明示的なポインタの宣言はJavaにはない。
だがポインタという概念がなくなったわけではないと私は思う。
例えば以下プログラムはどうだろう?
class test{
public static void main(String[] args){
tmp a =new tmp();
tmp b =new tmp();
a.data=10;
b.data=20;
a = b;
b.data=100;
System.out.println(“a= ” +a.data);
System.out.println(“b= ” +b.data);
}
}
class tmp{
int data;
}
実行結果は以下の通りである。
a= 100
b= 100
どうだろう?
a=10
b=100
と想像してしまった人はいないだろうか?
どこでa.dataに100という数字が入ってきてしまったんだろう?
問題は
a = b;
の箇所だ。
そうクラスは参照型なのである。
つまりclass tmp aにはクラスのアドレスが格納されている。
これはC言語でいうポインタとほぼ一緒ではないだろうか?
クラスのアドレスが格納されているので
a=b;
でアドレスの参照先が一緒になってしまう。
参照先が一緒なので
b.data=100;
でa.dataも100になってしまうというわけだ。
ポインタという概念がない人にとっては
戸惑ってしまうだろう。
| Javaのオブジェクト指向がゼッタイにわかる本―最初からそう教えてくれればいいのに! | |
![]() |
立山 秀利
秀和システム 2006-05 おすすめ平均 |
| Javaを独習する前に読む本 | |
![]() |
青木 峰郎
アスキー 2003-02 おすすめ平均 |



