小编Cod*_*odi的帖子

new type [0]和null之间的区别 - java

有什么区别

type[] a = new type[0];
Run Code Online (Sandbox Code Playgroud)

type[] a = null;
Run Code Online (Sandbox Code Playgroud)

这两种形式都占据任何记忆吗?有任何相似之处/不同之处吗?

java arrays null

6
推荐指数
1
解决办法
294
查看次数

Java varargs是如何在内存中实现的

据我所知,局部变量和参数存储在堆栈内存中,其中包括对象引用,而实际对象存储在堆内存中。那么当你使用 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而不一定位于堆栈内存中?

java heap-memory variadic-functions stack-memory

0
推荐指数
1
解决办法
417
查看次数