考慮以下方法簽名:Object數組
public fooMethod (Foo[] foos) { /*...*/ }
和
public fooMethod (Foo... foos) { /*...*/ }
說明:前者以富-對象數組作爲參數 - fooMethod(new Foo[]{..})
- 而後者接受任意數量的Foo類型的參數,並將其作爲方法內的Foo:s數組顯示 - fooMethod(fooObject1, fooObject2, etc...
)。
如果兩者都被定義,則Java會拋出適當的聲明,聲稱它們是重複的方法。我做了一些偵探工作,發現第一個聲明確實需要一個明確的Foo對象數組,並且這是調用該方法的唯一方法。第二種方法實際上接受任意數量的Foo參數,並接受Foo對象的數組。
所以,問題是,由於後一種方法似乎更加靈活,是否有任何理由使用第一個例子,或者我錯過了任何重要的東西?
不知道Java,這是黑暗中的刺,但我認爲第一個效率稍微高一點,因爲:a)你可能只會傳遞一個指針,並且b)你會將一個指針傳遞給內存的一個連續部分。 – 2008-10-06 12:11:30
@monoxide:不,這兩種形式都會生成等效的調用字節碼,這兩種形式都需要構建一個數組才能通過。 – 2008-10-06 12:13:58
第二種形式是第一種語法糖。所以,fooMethod(new Foo(1),new Foo(2))在這裏與fooMethod(new Foo [] {new Foo(1),new Foo(2)}相同 – 2008-10-06 12:14:51