2013-11-01 48 views
2

現在我想看看這劑指令的每次爭論實際上意味着,但沒有母校我用什麼樣的方式來編寫Java代碼,我從來沒有見過填充新的陣列在DEX:何時會顯示「filled-new-array」指令?

int[] iArr1 = new int[5];//just a new-array 
int[] iArr2 = {3, 4, 5, 6};//a "new-array" and "fill-array-data" 

我想iArr2應該生成一個全新的數組,並且元素是 那麼,如何在dex文件中生成一個填充的新數組指令?

每一個有用的答案將不勝感激!

回答

1

創建多維數組時通常使用填充的新數組操作碼。

下面的任何一個都應該爲你提供一個全新的數組指令。

int[][] iiArr1 = new int[1][2]; 
int[][] iiArr2 = new int[][] { { 3, 4, 5, 6 }, { 7, 8, 9, 0} }; 

要找到類似的例子進行其他操作碼,我建議看測試的DX工具,它具有例如Java代碼來生成最操作碼。例如,this test有一個示例java代碼,用於生成全新陣列操作碼

+0

是的,您給出的第一行將填充新陣列。第二行僅生成新陣列和填充陣列數據。當數組爲6或更多維時,它會帶來全新的陣列/範圍。 – gongweixue

+0

糟糕,你是對的。當我嘗試時,我可以發誓第二個產生一個全新的陣列,但我只是再次嘗試,並證實它沒有。 – JesusFreke

+0

嗯,請提出新的問題。 :)現在我需要說明:const-string/jumbo,not-int和not-long。但不管我如何編寫java代碼,android的'dx'工具生成的'xor'的值爲-1,但不是'not-int'或'not-long'。還有就是沒有'巨無霸'的常量字符串。那麼你能告訴我該怎麼做,謝謝! – gongweixue