Java方法中byte []和byte ...之间的区别

时间:2011-10-03 16:33:07

标签: java methods bytearray

有人问我两个方法参数之间有什么区别,以及为什么要使用...特别指定的数组。

putMessage(byte ...send)

putMessage(byte[] send)

我无法自信地回答他们,也不记得......被称为是什么。

5 个答案:

答案 0 :(得分:6)

第一个示例中的...称为varargs。你的第二个例子有一个数组参数。当你想要为方法硬编码可变数量的参数但又不想手动创建一个数组来保存它们时,Varargs是一种方便。这是一种速记符号。考虑一下:

putMessage(0b00100101, 0b00100101, 0b00100101); // varargs

VS。这样:

putMessage(new byte[] { 0b00100101, 0b00100101, 0b00100101 }); // array

第一个例子不那么混乱,更具可读性。

答案 1 :(得分:2)

如果您想谷歌那么,带椭圆的参数通常被称为“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将接受数组或每个变量作为单独的参数,从而为调用者节省了实例化和填充数组的麻烦。

答案 2 :(得分:1)

省略号(三个点)表示您正在使用“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。

答案 3 :(得分:1)

第一个是Varargs

简而言之

一个。首先可以用于调用单字节类型arg,2字节args ..或许多args或数组。

B中。 second将仅与数组一起使用。

答案 4 :(得分:0)

省略号(...)允许您将类型的N个参数内联到函数调用,而无需先定义数组。最后你只需要获得一系列参数,但它基本上是速记或语法糖。此外,您的客户端代码可能会更加清晰,并且使用省略号语法更具声明性......尽管它可能很容易走向其他方式并变得肮脏且难以理解。

这是省略号语法的a great example(可变长度参数列表。)在查看示例时,如果使用数组而不是变量长度参数,请考虑客户端代码(在main函数中)的样子列表。