2011-02-11 4 views
3

例:最初のオブジェクト要素がクラスIntegerのインスタンスである:Java:オブジェクトの配列内のオブジェクトの型を決定する方法は?

Object[] x = new Object[2]; 
x[0] = 3; // integer 
x[1] = "4"; // String 
System.out.println(x[0].getClass().getSimpleName()); // prints "Integer" 
System.out.println(x[1].getClass().getSimpleName()); // prints "String" 

これは私の思ってしまいますか?それともプリミティブなデータ型ですか?int?違いはありますか?

最初の要素の型(整数、倍精度、文字列など)を決定したい場合は、その方法を教えてください。 x[0].getClass().isInstance()を使用しますか? (もしそうなら、どのように?)、または何か他のものを使うのですか?

答えて

4

あなたはinstanceof演算子を使用したい:それは@biziclopがinstanceofを使用し、変数の型を確認するには

を言ったように、オートボクシングによって整数になります。あなたが尋ね

if(x[0] instanceof Integer) { 
Integer anInt = (Integer)x[0]; 
// do this 
} else if(x[0] instanceof String) { 
String aString = (String)x[0]; 
//do this 
} 
5

ありintIntegerの違いはあるとだけIntegerObject []に行くことができますが、オートボクシング/アンボクシングはそれは難しいそれを突き止めるためになります。

値を配列に入れたら、Integerに変換され、その起源は忘れてしまいます。同様に、int []と宣言してIntegerを入れると、それはその場でintに変換され、それまでにIntegerであったトレースは保存されません。

+0

+1に質問を説明することにより、質問 :) – Dinei

5

xはオブジェクト配列です。したがって、プリミティブ、オブジェクトのみを含むことはできません。したがって、最初の要素はInteger型です。

if (x[0] instanceof Integer) 
    System.out.println(x[0] + " is of type Integer") 
3

ないが、誰もが、配列に許さオブジェクトの種類を決定したい場合:例えば

Oject[] x = ...; // could be Object[], int[], Integer[], String[], Anything[] 

Class classT = x.getClass().getComponentType(); 
関連する問題