9

配列について話すときは長さがデータフィールドであり、Javaで文字列について話すときはlength()なのはなぜですか?意味:

int a[10] = {1,2,3,4,5,6,7,8,9,10};
String str = "foo";
int a_len = a.length;
int str_len = str.length();

配列の場合、長さが関数ではないのはなぜですか?またはその逆ですか?

4

3 に答える 3

9

簡単に言うと、それはまさにその通りであり、これまでのやり方です。

JLSセクション10.7で、配列にパブリックfinallengthフィールドがあることが指定されています。一貫性を保つために、代わりにメソッドとして指定することもできますが、そうではありませんでした...同様に、パブリック最終フィールドを持つように実装を決定することもString できましたが、そのようにはなりませんでした。length

1.0以降存続しているいくつかの不整合があります-明らかに、これらのことはリリース後に実際に変更することはできません...

于 2012-10-17T17:34:40.293 に答える
4

Stringインターフェイスはメソッドしか指定できないため、この場合はを実装CharSequenceし、したがってlengthメソッドである必要があります。

配列はインターフェイスを実装する必要がないためlength、この場合、余分なメソッド呼び出しのオーバーヘッドを回避するために、パブリックfinalフィールドとして実装されます。

編集:

Hot Licksが以下で指摘しているように、Java1.4CharSequenceより前には存在していませんでした。CharSequenceは明らかにこの設計選択の背後にある原動力ではありませんでしたが(存在しなかったため)、Stringが将来新しいインターフェイスを実装する必要があるかもしれないという考えでこの設計を選択することは依然として理にかなっています。

于 2012-10-17T17:39:44.630 に答える
0

これは変数と見なされ、メソッドとは見なされません。それは、クラスを作成し、Public static int numと言った後、メソッドでnumがグローバルに何かに等しいことを示したようになります。

于 2012-10-17T17:34:25.353 に答える