1

String.length() がメソッドであり、int[].length がプロパティであるのはなぜですか (以下を参照)。

int[] nums = {2,4,7,12,43};
String phrase = "Hello, world.";

System.out.length(nums.length);
System.out.length(phrase.length());
4

5 に答える 5

4

正当な理由がある必要はないと思いますし、多くの理由が考えられると思います。

しかし 1 つはString#length()、プロパティを作成することで、代わりにインターフェイスで宣言できることです (この場合はCharSequence)。インターフェイスは、パブリック インスタンス フィールドを宣言できません。

于 2013-02-13T14:58:11.833 に答える
1

String::length()関数は次のようになります。

public int length() {
    return count;
}

したがって、本質的には、配列と同様にcount呼び出さlengthれて公開される可能性があります (final結局のところ)。

それはおそらく単なる設計上の決定でした。推測できるいくつかの要因があった可能性があります (そのうちの 1 つはCharSequence、Mark Peters によって言及された可能性があります)。

于 2013-02-13T15:01:20.670 に答える
0

特に理由はないと思います。実際、非常によく似た言語である C# にString.lengthは、プロパティhttp://msdn.microsoft.com/en-us/library/system.string.length.aspxがあります。しかし、C# デザイナーがこの設計について何と言っているかを見てみましょう。

The Length property returns the number of Char objects in this instance, not the number of Unicode characters.
The reason is that a Unicode character might be represented by more than one Char. Use the 
System.Globalization.StringInfo class to work with each Unicode character instead of each Char.
于 2013-02-13T15:07:22.700 に答える
0

なぜ int[].length がプロパティなのですか?

配列は Java の特別なオブジェクトであり、最終的な長さという名前の単純な属性を持っています。

配列の「クラス定義」はなく (どの .class ファイルにもありません)、それらは言語自体の一部です。

  1. 配列のコンポーネントの数を含む public final フィールドの長さ。長さは正またはゼロです。

  2. クラス Object 内の同じ名前のメソッドをオーバーライドし、チェック例外をスローしない public メソッド clone。配列型 T[] の clone メソッドの戻り値の型は T[] です。

  3. 多次元配列のクローンは浅いです。つまり、単一の新しい配列のみを作成します。サブアレイは共有されます。

  4. クラス Object から継承されたすべてのメンバー。継承されないオブジェクトの唯一のメソッドは、そのクローン メソッドです。

リソース: JSL 10.7

なぜ String.length() がメソッドなのですか?

于 2013-02-13T15:08:17.210 に答える
0

String は配列そのものではないためです。Java の設計者は、配列 (オブジェクト) を という名前の public フィールドを持つように設計しましlengthた。

一方、String には代わりに長さを与えるメソッドがあります。一般に、メンバー フィールドをプライベートにし、メソッドを使用してそれらにアクセスすることは、より従来のアプローチですが、配列の場合はそうではありません。

あなたに関する限り、それらは異なる署名を持つ異なるオブジェクトです。AStringは a ではありませんchar[](ただし、内部的にはそのように実装されている可能性があります)。

于 2013-02-13T15:00:20.160 に答える