我应该如何在Java中声明main()
方法?
喜欢这个:
public static void main(String[] args)
{
System.out.println("foo");
}
或者像这样:
public static void main(String... args)
{
System.out.println("bar");
}
如果有的话,String[]
和String...
之间实际上有什么区别?
我应该如何在 Java 中声明 main() 方法?
String[]
和String...
在内部是一回事,即字符串数组。不同之处在于,当您使用 varargs 参数 ( String...
) 时,您可以调用如下方法:
public void myMethod( String... foo ) {
// do something
// foo is an array (String[]) internally
System.out.println( foo[0] );
}
myMethod( "a", "b", "c" );
// OR
myMethod( new String[]{ "a", "b", "c" } );
// OR without passing any args
myMethod();
当你将参数声明为字符串数组时,你必须这样调用:
public void myMethod( String[] foo ) {
// do something
System.out.println( foo[0] );
}
// compilation error!!!
myMethod( "a", "b", "c" );
// compilation error too!!!
myMethod();
// now, just this works
myMethod( new String[]{ "a", "b", "c" } );
约定是使用
String[]
和String
之间到底有什么区别......如果有的话?
String[]
作为主要方法参数,但使用 String...
也可以,因为当您使用 varargs 时,您可以像调用以数组作为参数的方法一样调用该方法,并且参数本身将是方法主体内的数组。
一件重要的事情是,当你使用 vararg 时,它必须是方法的最后一个参数,并且你只能有一个 vararg 参数。
您可以在此处阅读有关varargs的更多信息:http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html
String...
被转换为String[]
。主要区别在于您可以通过两种方式调用 vararg 方法:
method(a, b, c);
method(new String[] {a, b, c});
而你需要调用一个接受如下数组的方法:
method(new String[] {a, b, c});
对于main
方法,它没有区别。
String[] args
接受数组参数。
String... args
采用任意数量的字符串作为其参数,并从中创建一个数组。
让我们通过示例及其超级简单来了解差异
mymethod(String... str)
vs
mymethod(String []str)
方法 getid 采用 int 类型数组。
因此,如果我们调用 getId 方法,我们需要传递数组。
要传递数组,我们可以创建匿名数组,或者只是简单地先创建一个数组并传递,就像我在下面的示例中所做的那样。
class test
{
public void getid(int []i)
{
for(int value:i)
{
System.out.println(value);
}
}
public static void main(String []arg)
{
int []data = {1,2,3,4,5}
new test().getid(data);
}
}
现在下面我们使用三点 -> mymethod(int... i)
现在该方法仍然需要数组,但不同的是现在我们可以将直接值传递给该方法和"..."自动将其转换为数组
看下面的例子
class test
{
public void getid(int ...i)
{
for(int value:i)
{
System.out.println(value);
}
}
public static void main(String []arg)
{
new test().getid(1,2,3,4);
}
}
使用"..." 的优点而不是" [ ]"
1)它的节省内存:-
在一个例子中使用mymethod(int [ ])
当我们在主方法" Data[]"中创建数组时,它们会创建新对象并在内存
中获取空间以及当我们创建方法并定义参数时,例如:-
getid(int []) ->这将在内存中创建另一个对象,因此我们在内存中有 2 个彼此相同的对象
2)使用"..."
在示例二中,您在调用"getid"方法时不能传递任何内容,它们将在不给出任何错误的情况下工作,这对于使程序更稳定非常有帮助,例如
.
.
.
public static void main(String []arg)
{
new test().getid();
}
.
.
.
但是如果我们调用"getid"方法并且在使用"[ ]"时没有传递任何参数,那么它将在编译时显示错误
String[]
是一个字符串数组。因此,String
数据类型的许多变量的容器。例如:
String[] strArray = new String[2];
str[0] = "Hello";
str[1] = "World";
String str = "Hello World";