2012-09-05 33 views
2

如果沒有提供命令行參數,用於接受main()中命令行參數的參數String args[]是否會產生影響。是否String args []參數創建String的新實例?

它:

  1. 創建字符串的新對象?
  2. 分配給它的任何內存?

Java在遇到時會做什麼String args[]

更新: 想要問一個相關的問題:如果沒有提供cmdline參數,Will String args []是空的還是空的?

+1

是的,你將浪費16個字節,其成本大約爲0.00003美分的內存;) –

+0

那麼,Piotr Gwiazda說只有一個String []被創建(不是String對象),所以它會消耗16個字節嗎? –

+0

一個'String []'是一個對象,一個空的約爲16個字節。 –

回答

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 

注:該打印多少內存是如何被用於創建對象。如果創建臨時對象,這可能比保留的數量多。

+0

如何關閉TLAB?對不起,我覺得像一個初學者看到這一切 –

+0

添加'-XX:-UseTLAB'到命令行。 –

+0

我得到以下輸出'> javac -XX:-UseTLab TestC。java javac:invalid flag:-XX:-UseTLab.'我甚至用java命令試過這個選項。我也在互聯網上搜索了很多使用這個選項。但我無法關閉TLab。感謝您對我的問題持續的興趣 –

0

如果在沒有命令行參數的情況下調用程序,則args[]爲空,因此不會創建String。然後您將有一個空數組。

1

這取決於。如果你傳遞一些命令行參數,它會創建String對象。 String args[]只是對錶格對象的引用。如果沒有提供參數args將是空的。什麼是args你只能有參數。在C/C++中,例如你也可以例如應用名稱。 Java是不同的。在此處詳細瞭解命令行參數:http://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html

+0

你能告訴我什麼是表格對象? –

+0

表是Java中的對象。注意,你可以調用它們的某些方法(例如'length'),如果它們是C中的某些基本類型,那麼這將是不可能的。 –

1

此代碼創建的和一個String[]物體上的一個參考String[](空數組)。否String對象已創建。

相關問題