java数组存在堆,是一个Java数组的原始数据存储在堆栈或堆?

正如gurukulki所说,它存储在堆上。然而,你的帖子暗示了一个误解可能是由于一些善意的人传播的“原始人总是生活在堆栈”的神话。这是不真实的。局部变量在堆栈上有它们的值,但不是所有的原始变量都是局部变量…

例如,考虑这:

public class Foo

{

int value;

}

...

public void someOtherMethod()

{

Foo f = new Foo();

...

}

现在,f.value住在哪里?神话会建议它在堆栈 – 但实际上它是新的Foo对象的一部分,并生活在heap1。 (注意,f本身的值是一个参考,并且存在堆栈上。)

从那里,这是一个简单的步骤数组。你可以认为数组只是一个很多的变量 – 所以新的int [3]是有点像一个类的这种形式:

public class ArrayInt3

{

public readonly int length = 3;

public int value0;

public int value1;

public int value2;

}

1其实,这比这更复杂。堆栈/堆区别主要是一个实现细节 – 我相信一些JVM(可能是实验性的)可以告诉对象何时不会从方法中“转义”,并且可以在堆栈上分配整个对象。然而,它在概念上在堆上,如果你选择关心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值