[英]String initialization confusion in java
我试图在main函数中调用main函数,我尝试了以下代码并成功编译了代码。
class test
{
static int i = 0;
public static void main(String args[])
{
String asda[] = {"!2312"};
if (++i == 1)
main(asda);
}
}
但是在以下代码的情况下会发生错误:
class test
{
static int i = 0;
public static void main(String args[])
{
if (++i == 1)
main({"!2312"});
}
}
这让我很困惑。 混乱之处在于String数组的初始化就像String A[]={"asdf","Asdf");
那为什么在第二种情况下会出错呢? 我正在使用Java 8u40。
您要查找的语法是:
main(new String[]{"!2312"});
在第一个示例中,Java足够聪明,可以知道您正在创建String数组,因为它位于String []声明部分。 但是由于您在第二个示例中没有那个,所以Java不够聪明,无法知道它是String数组还是Objects数组。 因此,您需要通过包含String []部分来专门告诉Java这是一个String数组。
编辑:我还将注意到,您可以使用varargs而不是数组作为main()方法的参数:
public static void main(String... args){
然后,您可以使用String文字而不是数组来调用main()方法,如下所示:
main("!2312");
您的整个程序可能如下所示:
public class Main{
static int i = 0;
public static void main(String... args){
if (++i == 1){
main("!2312");
}
}
}
这有点超出您的问题,但是对您来说可能很有用。
像{"!2312"}
这样的文字的问题在于它们没有类型信息。 例如,Java无法知道您是指具有一个值的String[]
具有一个值的Object[]
。 您需要通过初始化变量来明确指定它:
String asda[]={"!2312"};
if(++i==1)
main(asda);
或致电new
操作员:
if(++i==1)
main(new String[]{"!2312"});
在前面的代码中,当您通过以下方式将asda传递给main
main(asda);
asda是一个数组,但是{“!2312”}不是一个数组,并且main方法接受声明中指定的字符串数组
public static void main(String args[])
其中args是一个数组。 因此,您应该将数组传递给main。 创建一个数组,然后将该字符串文字放入其中,然后将其传递给main。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.