0

私はJavaが初めてなので、これはばかげた質問かもしれません。いくつかのパラメーターの単純なゲッターとセッターを持つ SomeObject というクラスを作成するとします。次に、そのオブジェクトの 3 つのインスタンスの配列を作成します。次の違いは何ですか?

SomeObject[] objectArray = {new SomeObject(),new SomeObject(),new SomeObject()};
objectArray[0].setValue(10);

と:

SomeObject[] objectArray = new SomeObject[3];
objectArray[0].setValue(10);

最初のケースでは、objects[0] の値を完全に取得できます。

System.out.println(objectArray[0].getValue());

..後者は、値を設定しようとしているときに NullPointerException を返します。何かが足りないのでしょうか、それとも別の種類の間違いを犯したのでしょうか?

4

4 に答える 4

6

オブジェクトの配列を作成するとき、実際には2つのステップが必要です

  1. 配列を作成する
  2. オブジェクトを作成する

最初のメソッドは両方を実行しますが、2 番目のメソッドはステップ 1 のみを実行するため、実際のオブジェクトへの参照はnull.

Object[] objects = {new Object(),new Object(),new Object()};

ここで{...}は配列を作成し、内側newの はオブジェクトを作成します。

Object[] objects = new Object[3];

ここではnew、サイズ 3 の配列を作成します。ただし、 などの個々の要素object[0]は作成されないため、参照はnullであり、これにより例外が発生します。

于 2013-08-09T15:59:49.090 に答える
1

2 番目のバージョン はObject[] objects = new Object[3];、サイズ 3 の配列を作成しますが、オブジェクトは存在せず、null です。

最初のものはObject[] objects = {new Object(),new Object(),new Object()};、配列が作成されると同時にオブジェクトを明示的に作成するため、それらにアクセスできます

于 2013-08-09T15:59:50.360 に答える
0

2番目の方法でやりたい場合は、これを試すことができます:

SomeObject[] objectArray = new SomeObject[3]; 
objectArray[0] = new SomeObject(); //create SomeObject
objectArray[0].setValue(10); //give SomeObject the value of 10
于 2013-08-09T20:42:25.877 に答える