如果沒有提供命令行參數,用於接受main()
中命令行參數的參數String args[]
是否會產生影響。是否String args []參數創建String的新實例?
它:
- 創建字符串的新對象?
- 分配給它的任何內存?
Java在遇到時會做什麼String args[]
?
更新: 想要問一個相關的問題:如果沒有提供cmdline參數,Will String args []是空的還是空的?
如果沒有提供命令行參數,用於接受main()
中命令行參數的參數String args[]
是否會產生影響。是否String args []參數創建String的新實例?
它:
Java在遇到時會做什麼String args[]
?
更新: 想要問一個相關的問題:如果沒有提供cmdline參數,Will String args []是空的還是空的?
一個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
注:該打印多少內存是如何被用於創建對象。如果創建臨時對象,這可能比保留的數量多。
如何關閉TLAB?對不起,我覺得像一個初學者看到這一切 –
添加'-XX:-UseTLAB'到命令行。 –
我得到以下輸出'> javac -XX:-UseTLab TestC。java javac:invalid flag:-XX:-UseTLab.'我甚至用java命令試過這個選項。我也在互聯網上搜索了很多使用這個選項。但我無法關閉TLab。感謝您對我的問題持續的興趣 –
如果在沒有命令行參數的情況下調用程序,則args[]
爲空,因此不會創建String
。然後您將有一個空數組。
這取決於。如果你傳遞一些命令行參數,它會創建String對象。 String args[]
只是對錶格對象的引用。如果沒有提供參數args
將是空的。什麼是args
你只能有參數。在C/C++中,例如你也可以例如應用名稱。 Java是不同的。在此處詳細瞭解命令行參數:http://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html
你能告訴我什麼是表格對象? –
表是Java中的對象。注意,你可以調用它們的某些方法(例如'length'),如果它們是C中的某些基本類型,那麼這將是不可能的。 –
此代碼創建的堆的堆和一個String[]
物體上的一個參考String[]
(空數組)。否String
對象已創建。
是的,你將浪費16個字節,其成本大約爲0.00003美分的內存;) –
那麼,Piotr Gwiazda說只有一個String []被創建(不是String對象),所以它會消耗16個字節嗎? –
一個'String []'是一個對象,一個空的約爲16個字節。 –