2012-02-10 205 views
8

我有一個函數:爲什麼我不能通過這樣的陣列中的Java

draw(int[] a) 
{ 
    //... 
} 

,我想在陣列中{3,4,5}傳遞。爲什麼我不能撥打電話:

draw({3,4,5}); 
+0

這裏是參考:http://stackoverflow.com/questions/1610757/pass-array-to-method-java,可以幫助你http://www.jforeach.com/difference-between-object-and- reference-in-java/62 – 2012-02-10 05:36:13

回答

7

{3,4,5}的類型不明確(可能是int[],short[],等)。請嘗試:

draw(new int[]{3,4,5}); 
1

因爲{3,4,5}不是數組。 (如果是的話,那麼的數組是什麼?)

2

{3,4,5}並不反映是什麼類型。你應該這樣調用draw(new int[]{3,4,5});

2

因爲Java是不是matlab的!您必須先創建/註冊一個數組,然後才能通過!

+2

您也必須在Matlab中創建數組; Matlab只是具有更簡潔的語法。 – 2012-02-10 08:20:24

1

你可以傳遞這樣:draw(new int[]{3,4,5})

2

需要稱其爲draw(new int[]{3,4,5})

{3,4,5}是一個數組初始化方法,而前述new int[]這沒有任何意義。您可以查看{3,4,5}作爲參數傳遞給一個名爲int[]函數返回你一個新的數組。

0

數組通過引用傳遞。通過按引用意味着當一個陣列被作爲參數傳遞,它的存儲器地址位置實際傳遞,被稱爲其「參考」。

  1. {3,4,5}並未反映您要使用哪種類型。
  2. 如果你想通過數組,你應該這樣調用平局(新INT [] {3,4,5});所以方法可以知道你要使用數組。
1

看到其他ansers,爲什麼像你嘗試,你不能做到這一點。

但是你可以做這樣的事情:

draw(int... a) 
{ 
    //... 
} 

draw(3,4,5); 
+0

是的,這也是我的首選方式,因爲你仍然可以通過「正常」的陣營。 – Axel 2012-02-10 07:29:11

0

我想給這裏的一些其他的答案迴應。這是一種語言設計選擇,不支持數組創建的語法。但可能不是因爲這個構造總是含糊不清。只是說{3,4,5}是「模棱兩可」或「不反映類型」是一個過於簡單化。

使用數組初始值表達式作爲數組創建的簡寫可能存在模糊性,但它不是來自簡單的例子,如{3,4,5}。您可以使用類型提升規則來定義一個規則,以便明確確定像{x,y,z}這樣的數組初始值設定項的類型,就像使用類型提升規則確定算術表達式的類型(如x+y+z)一樣。那麼{3,4,5}int[]short[]在這個假設的情況下?這將是int[],因爲3,45是整數。

即使沒有接口的對象,也可以說{x,y,z,...}的類型是所有數組元素表達式可指定的最具體的通用超類。最低的共同點,如果你願意。

但是通過接口,你實際上有多重繼承,所以你可能有多個超類型,數組中的所有元素都可以指定給它們,但這兩個超類型都不能相互賦值,所以你有一個真正的不明確性。

而零元素的情況下,{},現在這是不明確的。

語言設計者可能提供了一個規則說「對自己的數組初始化表達式像new T[]{...}用於初始化的類型處理」。即使使用接口,他們也可以提供它並加上「......在類型明確的情況下,否則就是編譯錯誤」。但他們沒有。也許是因爲他們不想讓模糊不清。也許是因爲類型確定規則對編譯器或開發人員而言會變得複雜。也許是因爲他們不想在堆上分配一堆小陣列。但不是因爲{3,4,5}根本無法解釋。

相關問題