CosminO:
我々は、少なくとも一つのパラメータと同じタイプの潜在0以上のパラメータを受け取るメソッドを持っていると仮定すると:
public void method(T p1, T... otherPs)
そして、私たちはこのようになりますことを、それを呼び出すメソッドを持っていること:
public void callingMethod(T... params)
私たちが知っていることは、少なくとも1つのパラメータがあります。
それが呼び出すことが可能であるmethod
からcallingMethod
、このような何かを見て?
public void callingMethod(T... params){
[...]
method(params[0], restOfParams);
[...]
}
LppEdd:
確かに、それは可能であり、とても簡単。
唯一のオーバーヘッドは別の配列の作成です。
ユージーンを参照してください答えをメモリ消費を理解すること。
public void callingMethod(T... params){
...
method(params[0], Arrays.copyOfRange(params, 1, params.length));
...
}
トピックオフビットが、私はちょうど示唆したように、JOLを実行し、ここでは空の参照アレイの出力であります
final String[] array = new String[0];
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 0x0000000800000000 base address and 0-bit shift.
# Objects are 8 bytes aligned.
# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
# Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
[Ljava.lang.String;@7ea37dbfd object externals:
ADDRESS SIZE TYPE PATH VALUE
71695b2d0 16 [Ljava.lang.String; []
単一の配列のためにnull
、要素
final String array = new String[1];
[Ljava.lang.String;@7ea37dbfd object externals:
ADDRESS SIZE TYPE PATH VALUE
71692a7a8 24 [Ljava.lang.String; [null]
単一の、非含む配列のためnull
、要素を
final String array = new String[1];
array[0] = new String("");
[Ljava.lang.String;@7ea37dbfd object externals:
ADDRESS SIZE TYPE PATH VALUE
707612b68 16 [B [0].value []
707612b78 1577856 (something else) (somewhere else) (something else)
707793ef8 24 [Ljava.lang.String; [(object)]
707793f10 24 java.lang.String [0] (object)