如果没有提供命令String args[]
行参数,那么接受命令行参数的参数是否会产生影响。main()
可以:
- 创建一个新的String对象?
- 是否为它分配了内存?
Java遇到了怎么办String args[]
?
更新:想问一个相关的问题:如果没有提供 cmdline args,String args[] 会为空还是 null?
如果没有提供命令String args[]
行参数,那么接受命令行参数的参数是否会产生影响。main()
可以:
Java遇到了怎么办String args[]
?
更新:想问一个相关的问题:如果没有提供 cmdline args,String args[] 会为空还是 null?
这取决于。如果您传递一些命令行参数,它会创建 String 对象。String args[]
只是对表对象的引用。如果没有提供参数,则为args
空。更重要的是args
你只能有参数。例如,在 C/C++ 中,您还会有例如应用程序名称。Java是不同的。在此处阅读有关命令行参数的更多信息:http: //docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html
此代码在堆栈上创建一个引用String[]
,在堆上创建一个String[]
对象(一个空数组)。不创建对象。String
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
注意:这会打印创建对象使用了多少内存。如果创建临时对象,这可能会超过保留的数量。
如果在没有命令行参数的情况下调用程序, args[]
则为空,因此String
创建 no。然后你将有一个空数组。