2012-11-11 209 views
3

此數組是代碼Java中的片段:初始化對象類型

Object ob = new int[2]; 

現在讓我們假設我要初始化數組。 This ob[0] = 5;將不起作用,因爲ob是Object的類型。 鑄造不工作之一:

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

順便說一句,(int[]ob)[0]= 5; 會導致語法錯誤。 因此,如何在沒有硬編碼的情況下在運行時分配值(例如Object ob = new int[]{1,2}? 這不是一項家務工作,我想了解Java,這是爲了準備Java認證所必需的) Cheers

+0

'Object ob = new int [2];'這行是否正確? – Ankur

+0

非常正確,每個數組都是一個對象。 – uml

+0

你是對的,謝謝剛剛學到了一件新東西:) – Ankur

回答

11

您正在嘗試投的ob[0]的價值,而不是ob本身你需要投你obint[],然後用它在指數[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; 
} 
+0

是的,如果你確實有一個這樣的變量,出於某種奇怪的原因,寫'int [] tempArray =(int [])ob; '然後'tempArray [0] = 5;'。 –

+0

@HotLicks ..當然是。這可以最大限度地減少類似錯誤的可能性。 –

1

要創建陣列:

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

要直接初始化:

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

我真的不明白你想做的事,但你可以只投當你需要它?

4

您可以投你的對象數組類型由@Rohit耆那教(+1)提及或使用java.util.Array類,它具有像getLength(obj)set(obj, elem, index)等方法,這樣你就可以動態地創建陣列工作時,陣列式是指在確定運行。

+0

+1我想這是OP正在尋找的東西。 –

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

實際上並不需要。

ob[0] = 5將被編譯成這樣:

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

的問題是,由於ob是一個對象數組,而不是一個整數或整數數組,你將不能夠做數學運算,而不鑄造。

此功能稱爲autoboxing。它是爲了解決Java具有不能直接用作對象的基本數據類型這一事實而創建的。在.NET,Ruby和其他大多數「更純」面向對象的平臺,你可以做這樣的事情:

INT X = 5; 字符串valAsString = x。的toString();

在Java中,您必須將x包裝在Integer中才能做到這一點。

0

@ rohit-jain已經給你提供瞭解決方案...請注意,你沒有使用像他告訴你那樣的括號。

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

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

輸出將是「5」。