1. ホーム
  2. java

[解決済み] Javaでは1次元配列の要素はプリミティブなデータ型でなければならないのでしょうか?

2022-02-04 14:10:35

質問

コンピュータプログラミングの先生がJavaでそう主張しています。

1次元配列の要素はプリミティブなデータ型でなければならない

何時間も調べたのですが 任意の この主張を裏付けるような記述があります。

Javaでオブジェクトの配列を作れることは知っています。 CLI の引数も、プログラムに渡すのは String の配列になります。

彼女の正当な理由は String[] は、文字の多次元配列と見なすことができる。これは理解できるのですが、これがすべてのオブジェクトに当てはまるとは思えません。

さらに、オブジェクトを格納した配列は多次元になるため、1次元の配列ではオブジェクトを格納できないと言い切るのです。

の配列がどのようなものなのか理解できません。 Object , IntegerScanner は多次元にすることができる。

今、とても混乱しているのですが、何か見落としていることはありませんか?

どのように解決するのですか?

配列は、以下の要素を格納することができます。 任意の型 - プリミティブ int または long または float は、ラッパー Integer のようなオブジェクトは String , Person , Animal など。

を理解する必要があります。 Array のデータ構造として保存されることを意味します。 連続的 のブロックは、それが何であれ、メモリです。 しかし 同じデータ型の

  • プリミティブ 型の場合、実際の値の連続したブロックである。 すなわち int の配列は、各 int が 4 バイトを占め、各 int が 2 バイトを占めます。 ロング はそれぞれ8バイトを占有し、以下同様です。
  • の配列で オブジェクト (String、Person、Animal) を格納する配列です。 参照変数 (これはC++のようなポインタではありません)これらのオブジェクトはすべて、連続したブロックになります。

例えば Person p1 = new Person()Person p2 = new Person() を作成し、配列に格納します。 Person[] arr = {p1, p2} .

アール はリファレンスを持つことになります。 p1 p2 をメモリに保存し、その配列をたどることで実際の 人物 オブジェクトは、それ自体、多くのStringやint値(id、name、addressなど)が混在している可能性があります。このため、配列の効率性は保たれています。

というわけではありません。 arr が多次元になることは一切ありません。

このことは、他のいろいろなところでもっと詳しく読んで、先生にお返ししてください。