据我所知,本地变量和参数存储在堆栈内存中,其中包括对象引用,而实际对象存储在堆内存中。那么当你使用var args时到底会发生什么呢?
public static int[] test(int... x) {
return x;
}
public static void main(String[] args) {
int[] a = test(1,2,3,4,5);
int[] b = test(6,7,8,9,0);
System.out.println(a);
System.out.println(b);
for (int i : a) {
System.out.println(i);
}
for (int i : b) {
System.out.println(i);
}
在这里,我相信所有作为params传递给
test
在里面
x
存储在堆栈中,因此当我们调用
test(1,2,3,4,5)
,相应地,当我们调用
test(6,7,8,9,0)
我们应该引起堆栈上的内存冲突。。。但是当我运行上面的代码时,我得到了下面的结果。
[I@2db0f6b2
[I@3cd1f1c8
1
2
3
4
5
6
7
8
9
0
可以看出,在
a
因为第二次打电话给
测试
产生
b
. 两者的存储方式似乎不同。
这是否意味着参数以某种方式存储在堆中?这是否意味着任何形式的调用
function(param)
转化为
param
(原语或内存引用)不一定位于堆栈内存上?