Date: Fri, 5 Feb 99 14:17:22 JST From: SHUDO Kazuyuki Subject: [JavaHouse-Brewers:23392] .length is a final instance variable. (Re: =?ISO-2022-JP?B?GyRCQjMhJhsoQg==?= Vector) To: java-house-brewers at java-house.etl.go.jp (JavaHouse Brewers ML) Message-Id: <199902050516.OAA28553@cafe.muraoka.info.waseda.ac.jp> 首藤です。 大内さん wrote: > また配列は length というメンバを持っていてその配列の大きさを例えば > array.length とやって得ることができます。 「length というメンバ」と読んで 「あれっ? length ってフィールド(メンバ)だったっけ?」 と思いました。 Java仮想マシンにはフィールド(メンバ)の値を得る getfield 命令があり、 それとは別に配列長を得る arraylength 命令があります。 つまり、配列長とフィールドは扱いが異なるわけです。 では、Java 言語として length はどう位置付けられているのか調べました。 Java Language Specification (JLS) 1.0 の 10.3 Array Creation に、 The array's length is available as a final instance variable length. 配列の長さは final インスタンス変数 `length' として得られる。 とあります。 配列の長さは、Java 言語としてはフィールド length で得られるが、 Java仮想マシンは arraylength 命令で通常のフィールドとは別に扱う。 配列 の length はフィールドなのに、getfield 命令ではなく て arraylength 命令で得る、という点がいまひとつすっきり しないです。例えば、フィールド length を持った java.lang.Array 型を用意して、配列はすべてこのサブクラス とする、といった選択はなかったものでしょうかね。 #何か別の問題を引き起こしそうな気もしますけれど… SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh at muraoka.info.waseda.ac.jp