2

如果没有提供命令String args[]行参数,那么接受命令行参数的参数是否会产生影响。main()

可以:

  1. 创建一个新的String对象?
  2. 是否为它分配了内存?

Java遇到了怎么办String args[]

更新:想问一个相关的问题:如果没有提供 cmdline args,String args[] 会为空还是 null?

4

4 回答 4

1

这取决于。如果您传递一些命令行参数,它会创建 String 对象。String args[]只是对表对象的引用。如果没有提供参数,则为args空。更重要的是args你只能有参数。例如,在 C/C++ 中,您还会有例如应用程序名称。Java是不同的。在此处阅读有关命令行参数的更多信息:http: //docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html

于 2012-09-05T07:54:07.830 回答
1

此代码在堆栈上创建一个引用String[],在堆上创建一个String[]对象(一个空数组)。不创建对象。String

于 2012-09-05T07:57:42.230 回答
1

String[] 是一个对象,一个空的将是大约 16 个字节。

那很有帮助。我自己怎么计算呢?

public static long memoryUsed() {
    final Runtime rt = Runtime.getRuntime();
    return rt.totalMemory() - rt.freeMemory();
}

public static void main(String... args) {
    long before = memoryUsed();
    String[] arr = { };
    long after = memoryUsed();
    if(before == after) throw new AssertionError("you need to turn off the TLAB with -XX:-UseTLAB");
    System.out.printf("The String[] used %,d bytes of memory%n", (after - before));
}

印刷

The String[] used 16 bytes of memory

注意:这会打印创建对象使用了多少内存。如果创建临时对象,这可能会超过保留的数量。

于 2012-09-05T17:35:53.717 回答
0

如果在没有命令行参数的情况下调用程序, args[]则为空,因此String创建 no。然后你将有一个空数组。

于 2012-09-05T07:53:55.160 回答