[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