有什么区别
type[] a = new type[0];
Run Code Online (Sandbox Code Playgroud)
和
type[] a = null;
Run Code Online (Sandbox Code Playgroud)
这两种形式都占据任何记忆吗?有任何相似之处/不同之处吗?
据我所知,局部变量和参数存储在堆栈内存中,其中包括对象引用,而实际对象存储在堆内存中。那么当你使用 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);
}
Run Code Online (Sandbox Code Playgroud)
test在这里,我相信作为参数传递给in 的所有值都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
Run Code Online (Sandbox Code Playgroud)
a可以看出,由于第二次调用test生成 ,因此没有损坏 中的项目b。两者的存储方式似乎不同。
这是否意味着参数以某种方式存储在堆上?这是否意味着任何形式的调用function(param)都会转换为(原始或内存引用)的值,param而不一定位于堆栈内存中?