Javaのlengthとlength()から

1741 ワード

まず、次の質問に素早く答えることができますか?
コード自動補完機能を備えたIDEを使用しない場合、配列の長さをどのように取得して使用し、文字列の長さをどのように取得しますか?
私はかつて異なるレベルの開発者にこの質問をしたことがあるが、彼らは正確で自信を持ってこの質問に答えることができなかった.IDEは,信頼性の高い自動コード補完機能を提供するとともに,知識の習得度を表面レベルにとどめる.この文章では,配列に関するいくつかの重要な概念を説明する.では、上記の質問の答えは次のとおりです.
int[] arr = new int[3];
System.out.println(arr.length);//length for array
 
String str = "abc";
System.out.println(str.length());//length() for string

現在の問題は、なぜ配列にlengthフィールドがあり、文字列がないのかということです.また、文字列にlength()メソッドがあり、配列がないのはなぜですか.
問題1配列にlengthプロパティがあるのはなぜですか?
まず、配列は固定サイズの単一のオブジェクトを保存するコンテナです.配列が作成されると、lengthは変更されません[1].配列のlengthはfinalのインスタンス変数として得ることができる.従ってlengthは配列の所定の属性であると考えられる.配列は、1)配列宣言式2)配列初期化器の2つの方法で作成できます.一度作成すると、そのサイズは固定されます.配列の宣言式は、要素のタイプ、配列の次元数、および配列の少なくとも1次元の長さを示す上記の例で使用されています.次の宣言も、多次元配列の1つの長さを宣言するため、合法的です.
int[][] arr = new int[3][];

配列初期化器は宣言と同時に初期値を与え、カッコで囲まれたカンマで区切られたリストの形式で書かれます.例を挙げると、
int[] arr = {1,2,3};

質問2「String」のような「Array」というクラスがないのはなぜですか?
配列がオブジェクトである以上、次のコードは合法です.
Object obj = new int[10];

配列には、Objectから継承されたすべてのメンバー(cloneを除く)が含まれています.なぜ配列クラスの定義がないのですか?Array.javaというファイルが見つかりません.このファイルが私たちに隠されているという曖昧な解釈があります.配列クラスがあればどうなるか想像できますか?配列のデータを保存するために配列が必要ですよね?したがって、配列を定義するクラスは良いアイデアではありません.実際には、次のコードで配列のクラスを得ることができます.
int[] arr = new int[3];
System.out.println(arr.getClass());

出力:
class [I

「class[I」は、「intタイプのデータが入った配列オブジェクト」のランタイムタイプ記号を表します.
質問3 Stringにlength()メソッドがあるのはなぜですか?
文字列の内部は文字配列を使用して実現されます.どのプログラムでも不要なフィールドを定義する必要はありません.C言語とは異なり、Javaでは文字配列は文字列ではありません.
引用:[1]配列[2]JAVA言語仕様配列
原文リンクps:ブロガーの配列に関するいくつかの見方はブロガーの前の文章を参考にすることができる.