[英]Difference between byte[] and byte … in Java Methods
有人問我兩個方法參數之間有什么區別,以及為什么要使用...特別指定的數組。
putMessage(byte ...send)
putMessage(byte[] send)
我無法自信地回答他們,也不記得......被稱為是什么。
你的第一個例子中的...
被稱為varargs 。 你的第二個例子有一個數組參數。 當你想要為方法硬編碼可變數量的參數但又不想手動創建一個數組來保存它們時,Varargs是一種方便。 這是一種速記符號。 考慮一下:
putMessage(0b00100101, 0b00100101, 0b00100101); // varargs
與此:
putMessage(new byte[] { 0b00100101, 0b00100101, 0b00100101 }); // array
第一個例子不那么混亂,更具可讀性。
如果你想谷歌那么,帶橢圓的參數通常被稱為“varargs”。
使用varargs允許您調用具有可變數量參數的方法,而無需指定數組,例如
public void printStr(String ...strings) {
for (String s : strings) {
System.out.println(s);
}
}
> printStr("Hello", "World")
Hello
World
因此varargs允許一定程度的便利性,但有缺點 - varargs參數必須是方法簽名中的最后一個參數,因此您不能為方法提供多個varargs參數。 如果要將多個數組傳遞給方法,則必須使用數組,而不是varargs。
您可能在某些可能期望varargs的地方看到數組的另一個原因是varargs僅在Java 5中引入 - 較舊的代碼和需要向后兼容的代碼仍將使用數組,即使在概念上使用varargs可能更有意義。
在方法簽名中使用varargs的優點是靈活性 - 在某些情況下,調用者無論如何都會准備好數組,有些情況下他們只有幾個參數。 Varargs將接受數組或每個變量作為單獨的參數,從而為調用者省去了實例化和填充數組的麻煩。
省略號(三個點)表示您正在使用“varargs”。
有關詳細信息,請參閱http://download.oracle.com/javase/1,5.0/docs/guide/language/varargs.html 。
在方法內部,您可以作為數組訪問“send”元素。 在這方面,這兩種方法是相同的。 方便的是來電者。 在第二個putMessage中,調用者被迫創建一個字節數組以傳遞給putMessage。 在第一個putMessage中,調用者可以簡單地說“putMessage(byte1,byte2)”或“putMessage(byte1,byte2,byte3)”或“putMessage(byte1)” - 可變數量的參數或varargs。
省略號(...)允許您將類型的N個參數內聯到函數調用,而無需先定義數組。 最后你只需要獲得一系列參數,但它基本上是速記或語法糖。 此外,您的客戶端代碼可能會更加清晰,並且使用省略號語法更具聲明性......盡管它可能很容易走另一條路,變得骯臟且難以理解。
這是省略號語法(可變長度參數列表)的一個很好的例子 。在查看示例時,如果使用數組而不是可變長度參數列表,請考慮客戶端代碼(在主函數中)的樣子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.