[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: ポインターと参照




>Object o1;

Object o1;         // この段階ではまだ全く初期化されていない
o1 = null;         // 空のオブジェクトを参照している(つまり何も指していない)
o1 = new Object(); // あるオブジェクトを参照している(やっと実体を保持するようになった)

>Object o[] = new Object[1];

これですが、実は 

Object[] o = new Object[1]; // Object型の要素数1の配列として初期化された。

こうです。o[] でないところがミソです。

「Java言語規定  10. 配列」
http://www.y-adagio.com/public/standards/tr_javalang/10.doc.htm

ここに、

>配列の構成要素はすべて,配列の 構成要素型(component type)と呼ぶ同じ型をもつ。
>配列の構成要素型が T ならば,その配列自体の型をT[] とする。

と書いてあります。 int の配列なら int[] 型です。さらに、

>Javaの 配列(arrays) は,オブジェクト(4.3.1)とし,動的に生成され,
>型 Object(4.3.2)の変数として代入可能とする。
>すべてのクラス Object のメソッドは,配列に対して呼出し可能とする。 

ということで、すべての配列の基底クラスは Object です。

つまり int[] intarray = int[10]; Object o = intarray; という代入が可能です。

# 変な言語^^;

>o1(単一オブジェクト) と o(要素数1の配列オブジェクト) との
>違いを明確にするにはどう説明しましょう?(^^;

Object o1;                  o1   = new Object();
Object[] o = new Object[1]; o[0] = new Object();

(なんだかあまり違うような気がしない。^^;俺だけ?)

># VM内でのメモリ確保の仕方とか

これはよくわからないっす。

># 単純に代入方法が違うだけとか

添え字でアクセスしない/する の違い?(良く分からない)

># 実は oはポインタもどきであるとか

o がポインター変数だとしたら Object[] へのポインターを格納するポインター変数かな^^;

でもそれなら o1 も Object へのポインターを格納するポインター変数ですね。

「Java言語規定
  0. 標準情報としての導入
      0.3 定義」
 http://www.y-adagio.com/public/standards/tr_javalang/index.htm

ここに、

>参照(reference) 
>      値が番地であるデータ要素。 

こんなことが書いてあった。

# ますます私には良く分からなくなってきました。^^;
# 単純にアドレスが格納してあると思えば良いのでしょうか? Cみたいにアドレス演算できないにせよ。
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル      FAX 03-5362-9008