String args[]
コマンドライン引数が指定されていない場合、コマンドライン引数を受け入れるためのパラメーターにmain()
影響がありますか。
それは:
- 文字列の新しいオブジェクトを作成しますか?
- それに割り当てられているメモリはありますか?
に遭遇したとき、Java は何をしますString args[]
か?
更新: 関連する質問をしたい: コマンドライン引数が指定されていない場合、String args[] は空または null になりますか?
String args[]
コマンドライン引数が指定されていない場合、コマンドライン引数を受け入れるためのパラメーターにmain()
影響がありますか。
それは:
に遭遇したとき、Java は何をしますString args[]
か?
更新: 関連する質問をしたい: コマンドライン引数が指定されていない場合、String args[] は空または null になりますか?
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
注: この出力は、オブジェクトの作成に使用されたメモリの量です。これは、一時オブジェクトが作成された場合に保持される量を超える可能性があります。
場合によります。コマンドライン引数を渡すと、String オブジェクトが作成されます。String args[]
テーブルオブジェクトへの参照のみです。引数が指定されていない場合はargs
空になります。さらに、args
パラメーターのみを持つことができます。C/C++ では、たとえば、アプリケーション名もあります。ジャバは違います。コマンドライン引数の詳細については、http: //docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.htmlを参照してください。
このコードは、スタックString[]
に 1 つの参照を作成し、ヒープに1 つのオブジェクト (空の配列) を作成します。オブジェクトは作成されません。String[]
String
プログラムがコマンド ライン引数なしで呼び出された場合、 args[]
は空なので、 noString
が作成されます。その場合、空の配列ができます。