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... 也可以,因为当我们使用可变参数时,可以像调用以数组作为参数的方法和一样将其作为参数来调用方法,它将是方法体内的一个数组。

还有一个比较重要的事情是,当使用可变参数时,它必须是方法的最后一个参数,并且一个方法只能有一个可变参数。

使用 ... 替代 [] 的优势

  1. 节省内存 在上面示例中使用 mymethod(int [])。当我们在main方法中创建一个数组“Data[]”时,它们会创建新对象并获得内存空间。以及当我们创建方法并定义参数时:getid(int []) -> 这将在内存中创建另一个对象,因此我们在内存中有 2 个彼此相同的对象

  2. 使用“...”时可以不传递任何内容 可以在调用“getid”方法时不传递任何内容,并且它们可以正常工作而不会出现任何错误,这对于使程序更稳定非常有帮助,例如

    ...

    publicstaticvoidmain(String []arg)

    {

    newtest().getid();

    }

    ...

    但是,如果我们使用 [],调用 getid 方法时不传递任何内容的话,它会在编译时报错。

本文转载自:迹忆客(https://www.jiyik.com)

以上是 Java 中 String[] 和 String... 有什么不同 的全部内容, 来源链接: utcz.com/z/290274.html

回到顶部