繁体   English   中英

Java中的字符串初始化混乱

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM