我很想知道整数和整数数组是如何存储在java的堆栈/堆中的,是否有人可以指向我的链接?或者有人可以向我解释一下。
更新1: 这是如何影响整数和整数数组作为Java中方法的参数传递的方式。
谢谢
答案 0 :(得分:0)
答案 1 :(得分:0)
方法变量存储在Stack中。另一方面,对象存储在堆中,如下图所示。 这就是为什么如果你得到StackOverFlowException,这意味着你在方法中声明了太多变量,或者你在递归调用中调用了太多方法。如果你得到Java堆空间错误,这意味着你创建的对象比你做的多。 对于堆栈和堆解释,我建议this link
答案 2 :(得分:0)
无论何时在本地范围(方法)中声明变量,它都会被放入堆栈。
即:Type myVariable
会将新变量的空间推送到该方法堆栈框架上,但由于它未初始化而无法使用。
为变量赋值时,该值将被放入堆栈的保留空间。
现在这里是棘手的部分。如果类型是原始类型,则该值包含您指定的值。例如,int a = 55
将字面值55放入该空间
但是,如果类型是非原始类型,即Object的某个子类,则放入堆栈的值实际上是内存地址。此内存地址指向堆上的某个位置,该位置是存储实际Object的位置。
在创建时将对象放入堆中。
示例
private void myMethod()
{
Object myObject = new Object();
}
我们正在声明一个变量,因此我们在堆栈帧上获得了空间。类型是一个Object,因此该值将成为指向创建Object时分配的堆上空间的指针。