Java 中 String[] 和 String... 有什么不同
在Java中,在定义方法的时候,作为参数的 String[]
和 String...
有什么不同呢?这是经常会被问到的一个问题。也就是说,下面的代码有什么区别
publicstaticvoidmain(String[] args)
{
System.out.println("foo");
}
和
publicstaticvoidmain(String... args)
{
System.out.println("bar");
}
String[]
和 String...
在内部是相同的,即。 例如,一个字符串数组。 不同之处在于,当我们的方法的参数个数是不固定的时候要使用 String... ,调用如下方法:
publicvoidmyMethod( String... foo ) {
System.out.println( foo[0] );
}
myMethod( "a", "b", "c" );
// 或者
myMethod( newString[]{ "a", "b", "c" } );
// 或者也可以不传参数
myMethod();
如果将参数声明为 String 数组时,必须像下面一样进行调用:
publicvoidmyMethod( String[] foo ) {
// do something
System.out.println( foo[0] );
}
// 编译错误!!!
myMethod( "a", "b", "c" );
// 编译错误!!!
myMethod();
// 只能使用这种方式
myMethod( newString[]{ "a", "b", "c" } );
约定使用 String[]
作为 main 方法的参数,但使用 String...
也可以,因为当我们使用可变参数时,可以像调用以数组作为参数的方法和一样将其作为参数来调用方法,它将是方法体内的一个数组。
还有一个比较重要的事情是,当使用可变参数时,它必须是方法的最后一个参数,并且一个方法只能有一个可变参数。
使用 ...
替代 []
的优势
节省内存 在上面示例中使用
mymethod(int [])
。当我们在main方法中创建一个数组“Data[]”时,它们会创建新对象并获得内存空间。以及当我们创建方法并定义参数时:getid(int []) -> 这将在内存中创建另一个对象,因此我们在内存中有 2 个彼此相同的对象使用“...”时可以不传递任何内容 可以在调用“getid”方法时不传递任何内容,并且它们可以正常工作而不会出现任何错误,这对于使程序更稳定非常有帮助,例如
...
publicstaticvoidmain(String []arg)
{
newtest().getid();
}
...
但是,如果我们使用
[]
,调用 getid 方法时不传递任何内容的话,它会在编译时报错。
本文转载自:迹忆客(https://www.jiyik.com)
以上是 Java 中 String[] 和 String... 有什么不同 的全部内容, 来源链接: utcz.com/z/290274.html