int[] a = new int[123]的分配内存方式

xuhaohotmail 2010-01-15 09:13:16
new int[123]是新建一个对象,还是123个int型变量
int[] a是一个引用,还是123个变量名
内存中空间分配是,堆中开辟一个对象空间,栈中开辟一个对象引用空间
还是栈中开辟123个int型变量空间
...全文
401 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxpp688 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 xuhaohotmail 的回复:]
new int[123]是新建一个对象,还是123个int型变量
int[] a是一个引用,还是123个变量名
内存中空间分配是,堆中开辟一个对象空间,栈中开辟一个对象引用空间
还是栈中开辟123个int型变量空间
[/Quote]

new int [123] //在内存上开辟了一个容量为[123]的int型的连续空间

因为(new)你是用堆(heap)分配int[123]变量空间的,所以位于RAM中;
值得注意的是:1.你声明的是一个变量(所以他是动态的),而且他的存活时间你

可以比声明(Java有自动垃圾回收机制)。
2.(我把你的补全)int []a =new int [123];
你创建了一个int[123]的对象他目前指向 a;但是变量a存放在栈(stack)中也位于

RAM中。所以你调用了内存指针向下移动。int[]a,在你调用的作用域中存活。

这就是你所干的事!
24K純帥 2010-01-30
  • 打赏
  • 举报
回复
顶1L的。。
zhuyouyong 2010-01-30
  • 打赏
  • 举报
回复
int[] a是一个引用,分配在栈中
nj_dobetter 2010-01-18
  • 打赏
  • 举报
回复
基本类型直接从堆上分配空间,所以申请了含123个int的数组。

而Object[] array = new Object[123];
只是申请了123个Object的引用
xuhaohotmail 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kingwolfofsky 的回复:]
那行代码的字节码
Java code0 bipush1232 newarrayint [10]4 astore_1 [a]5return
可以说,a是放在java的运行时栈里面的
楼主感兴趣可以看看JVM
[/Quote]

怎么看jvm,给个意见
笨翔 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 goldenfish1919 的回复:]
new int[123]是新建一个数组对象,这个对象是分配在堆内存中,123个int。
int[] a是一个引用,分配在栈中,用a来引用刚才分配出来的那个对象。


[/Quote]
支持
KingWolfOfSky 2010-01-15
  • 打赏
  • 举报
回复
那行代码的字节码

0 bipush 123
2 newarray int [10]
4 astore_1 [a]
5 return

可以说,a是放在java的运行时栈里面的
楼主感兴趣可以看看JVM
weihthchk 2010-01-15
  • 打赏
  • 举报
回复
如果不需要使用C的话,不要去看C的指针,因为只会带来混淆。
Java中,“一切皆对象”。数组是一个对象,分配在堆上,而局部变量的声明,只是在栈上分配了一个用来存数组对象的引用的内存空间。至于数组内部是什么样子,在内存里如何布局,恐怕不太容易知道,很可能是虚拟机特定实现的。
Java的初始化很有意思,对于字段,如果你不显式初始化,那么根据类型不同就初始化为null或者false或者0。
它不会初始化局部变量,如果你使用了未显式初始化的变量,那么你的代码通不过编译。
数组建立后,其每个元素的初始化规则,和字段的一样。
sagegz 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 xuhaohotmail 的回复:]
new int[123]是新建一个对象,还是123个int型变量
int[] a是一个引用,还是123个变量名
内存中空间分配是,堆中开辟一个对象空间,栈中开辟一个对象引用空间
还是栈中开辟123个int型变量空间
[/Quote]
new int[123]是动态创建一个整型数组,数组大小123
a是一个数组引用
引用变量存放在栈中,不在堆中。
分配的数组空间在堆中。
dong502 2010-01-15
  • 打赏
  • 举报
回复
支持LS 先看C的指针
lenovo_itcast 2010-01-15
  • 打赏
  • 举报
回复
这是一种堆栈方式。java中封装了很多东西,可以去看看c语言,里面指针部分,对于这方面的理解很有帮助。
若鱼1919 2010-01-15
  • 打赏
  • 举报
回复
new int[123]是新建一个数组对象,这个对象是分配在堆内存中,123个int。
int[] a是一个引用,分配在栈中,用a来引用刚才分配出来的那个对象。

liufei83 2010-01-15
  • 打赏
  • 举报
回复
a是分配在栈内存中的一个引用,指向堆内存中的一个int[123]数组,该数组中存放的是123个int型数据,在刚new出来的时候,所有数据都初始化为0.

楼主弄清楚基础数据类型数组和对象数组的概念就行了

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧