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

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



>・Javaには、C/C++における「ポインタ」が存在するが、それを
>  「参照」と呼んでいる。

これには異論があります。特に JNI プログラミングでは、
Java の参照をポインターと呼んでしまうとはまるような気がします。

>(1)Javaは、プリミティブのポインタをとることができない。

これがとても重要だと思います。

Java には、「クラスを離れたメソッドは無い」のですが、
同様に、「関数ポインターは無い」です。

「関数ポインターが無い」にもかかわらず、interface があれば簡潔に
エレガントなコードが書けます。

>(2)Javaは、オブジェクトと配列については、ポインタしかない。

全てが java.lang.Object を基底クラスにしていることが重要なのでは...

>(4)Javaには、Cにおける「ポインタと配列の間の微妙な関係」はない。

この代償として、配列は妙なコードを書かなくてはなりませんです。

>Cで「ポインタが難しい」とよく言われるのは、実は原因は(4)であ
>ると思うので、その点において Java が Cより簡単なのは否定しま
>せんけれども。

これもあるけど、難しい原因は「ポインターという概念」ではないかと。
「ポインターはアドレスではない」というのを理解するのに
私はすごく時間がかかりました。

あと、用語の問題として、「ポインター型の変数」のこともポインターと呼ぶし、
「ポインター型の値」のこともポインターと呼ぶので初心者は混乱します。

>># 問題出してる本人も答えは分からん (*_*)
>私にも分からんです。

以前紹介しましたが、C++ と Object Pascal と Java で swap() 関数問題を扱った
Webページがありました。たいへん面白かったです。(Object Pascal って素敵^^;)

>C に慣れた私としては、C++の参照型は、どうも好かんです。コー
>ディングをだーっと読んでって、いつ変数の値がぶち壊される可能
>性があるのかをつかみにくいと思います。

C++ の参照型は、関数引数としてクラスをとる時に威力を発揮します。
# C++ に挫折した者の発言ですので不正確な情報かも知れません。

>演算子のオーバーロードも好かんです。

私も嫌い。

>templateは欲しいですが。

あれば便利だろうけど要らないことにします。

(それよりプリミティブを格納できるCollectionが欲しい。
でも Int クラスを書いちゃったからいいや...)

# ゴミついでですが、Int クラスはこういう↓クラスです。

// privitive wrapper utility
// Int.java
// copyright(c) 1999 yasuyuki@xxxxxxxxxx

package jp.co.timedia.util;

public class Int {
  public int i;

  public Int(int i) {
    this.i = i;
  }

  public static final int[] toIntArray(Int[] ints) {
    int[] intarray = null;
    if (ints != null) {
      intarray = new int[ints.length];
      for (int n=0; n<ints.length; n++) {
        intarray[n] = ints[n].i;
      }
    }
    return intarray;
  }
}
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル      FAX 03-5362-9008