gpt4 book ai didi

java - 从调用方法传递可变数量的参数

转载 作者:行者123 更新时间:2023-12-02 02:46:05 25 4
gpt4 key购买 nike

假设我们有一个方法,它至少接收一个参数,并且可能接收 0 个或多个相同类型的参数:

public void method(T p1, T... otherPs)

我们有一个调用它的方法,如下所示:

public void callingMethod(T... params) 

我们知道至少有一个参数。

是否可以从 callingMethod 调用 method 来看起来像这样?

public void callingMethod(T... params){
[...]
method(params[0], restOfParams);
[...]
}

最佳答案

当然,这是可能的,而且非常简单。
唯一的开销是创建另一个数组。
参见尤金answer了解内存消耗。

<小时/>
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)

关于java - 从调用方法传递可变数量的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55532019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com