3

これはJavaのコードスニペットです。

Object ob = new int[2];

ここで、配列を初期化するとします。これ ob[0] = 5; obはオブジェクトのタイプであるため、機能しません。キャストも機能していません:

(int[])ob[0] = 5;

ちなみに、(int[]ob)[0]= 5; 構文エラーが発生します。それで、ハードコーディングなしで実行時に値を割り当てる方法(例:Object ob = new int[]{1,2}これは宿題ではありません、私はJavaを理解しようとしています。それはJava認定の準備のために必要です。乾杯

4

5 に答える 5

11

ob[0]あなたはそれ自体ではなく、の価値をキャストしようとしていobます。ob最初にキャストしてからint[]、インデックスで使用する必要があります[0]

((int[])ob)[0] = 5;

注:-括弧は重要です。しかし、なぜあなたはこのようなことをしたいのですか?


値をハードコーディングせず、実行時に取得したい場合は、@HotLicksがコメントで言及していることに従う必要があります。

Object ob = new int[5];

int[] tempArr = (int [])ob;

for (int i = 0; i < tempArr.length; i++) {
    tempArr[i] = i;
}
于 2012-11-11T14:57:28.643 に答える
4

@Rohit Jain(+1)で説明されているように、オブジェクトを配列型にキャストするか、などのjava.util.Arrayメソッドを持つクラスを使用して、実行時に配列型が定義されているときに動的に作成された配列を操作できます。getLength(obj)set(obj, elem, index)

于 2012-11-11T15:00:11.900 に答える
1

配列を作成するには:

int[] arrayName = new int[%size in int%];

直接初期化するには:

int[] arrayName = {1,2,3,4,5};

私はあなたがやりたいことを本当に理解していませんが、あなたはそれを必要なときにキャストすることができますか?

于 2012-11-11T14:59:05.930 に答える
1
(int[])ob[0] = 5;

実際には必要ありません。

ob[0] = 5これにコンパイルされます:

ob[0] = new java.lang.Integer(5);

問題は、obが整数または整数配列ではなくオブジェクト配列であるため、キャストせずに数学演算を実行できないことです。

この機能はオートボクシングと呼ばれます。これは、Javaにはオブジェクトとして直接使用できないプリミティブデータ型があるという事実を回避するために作成されました。.NET、Ruby、およびその他のほとんどの「より純粋な」オブジェクト指向プラットフォームでは、次のようなことができます。

int x = 5; 文字列valAsString=x.toString();

Javaでは、これを行うにはxをaでラップIntegerする必要があります。

于 2012-11-11T15:05:52.897 に答える
0

@rohit-jainはすでに解決策を提供しています...彼が指示したように括弧を使用していないことに注意してください。

int[] intArray = new int[2];
Object ob = intArray;

((int[])ob)[0]= 5;
System.out.println(intArray[0]);

出力は「5」になります。

于 2012-11-11T15:22:22.983 に答える