私は現在、高校の AP コンピューター サイエンスのクラスにいて、読書中にこれに出会いました。
私が理解していることから.length()
、メソッドは文字列に使用されますが、.length()
配列に適用されたときにメソッドが使用されないのはなぜですか? それらが異なるオブジェクトであることは理解していますが、なぜJavaは配列の長さを見つけるための別のメソッドを作成しなかったのですか?
私が得た応答に感謝します。ありがとう!
私は現在、高校の AP コンピューター サイエンスのクラスにいて、読書中にこれに出会いました。
私が理解していることから.length()
、メソッドは文字列に使用されますが、.length()
配列に適用されたときにメソッドが使用されないのはなぜですか? それらが異なるオブジェクトであることは理解していますが、なぜJavaは配列の長さを見つけるための別のメソッドを作成しなかったのですか?
私が得た応答に感謝します。ありがとう!
配列はインスタンス化された時点で定義された固定長であるため、長さはクラスの public final フィールドです。実行時に計算を行う必要がないため、メソッドにする必要はありません。
詳細については、Java 仕様のこのセクションを参照してください: http://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.7
さて、値を取得するためのアクセサメソッドを提供しなかった理由の設計上の問題については、指定されていません。おそらく、これは他の規則が設定される前に行われたものであり、これは単なるレガシーです。このようにするという決定の「理由」の部分を知っているのは、言語設計者だけです。
配列はJava 言語仕様 #10.7で定義されています。特に:
配列型のメンバーは、次のすべてです。
- 配列のコンポーネントの数を含む public final フィールドの長さ。長さは正またはゼロです。
- [...]
なぜこのアプローチが言語設計者によって選ばれたのか、私には答えられません。
興味深いことに、 Java の祖先であるOak 仕様ではすでにそうでした。
これには十分な技術的理由があるとは思えません。
これは、大量のコードを壊さずに修正できるほど早期に発見されなかった小さな矛盾の 1 つであると思われます。