String args []参数是否创建了String的新实例?

时间:2012-09-05 07:51:16

标签: java

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

是吗:

  1. 创建String的新对象?
  2. 是否分配了任何内存?
  3. Java遇到String args[]时会做什么?

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分: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

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

答案 3 :(得分:0)

如果在没有命令行参数的情况下调用程序,args[]为空,则不会创建String。那么你将有一个空数组。