社区
Java SE
帖子详情
int[] a = new int[123]的分配内存方式
xuhaohotmail
2010-01-15 09:13:16
new int[123]是新建一个对象,还是123个int型变量
int[] a是一个引用,还是123个变量名
内存中空间分配是,堆中开辟一个对象空间,栈中开辟一个对象引用空间
还是栈中开辟123个int型变量空间
...全文
401
13
打赏
收藏
int[] a = new int[123]的分配内存方式
new int[123]是新建一个对象,还是123个int型变量 int[] a是一个引用,还是123个变量名 内存中空间分配是,堆中开辟一个对象空间,栈中开辟一个对象引用空间 还是栈中开辟123个int型变量空间
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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.
楼主弄清楚基础数据类型数组和对象数组的概念就行了
int
*p1 =
new
int
[10];
int
*p2 =
new
int
[10](); 区别
下面描述正确的是
int
*p1 =
new
int
[10];
int
*p2 =
new
int
[10](); p1和p2申请的空间里面的值都是随机值 p1和p2申请的空间里的值都已经初始化 p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化(对) p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值 解释 在C++primer(第5版)中关于
int
*p1 =
new
int
[10];
int
*p2 =
new
int
[10](); 区别
下面描述正确的是
int
*p1 =
new
int
[10];
int
*p2 =
new
int
[10](); p1和p2申请的空间里面的值都是随机值 p1和p2申请的空间里的值都已经初始化 p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化(对) p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值 解释 在C++primer(第5版)中关于
new
的讨论有: 1、
new
当个对象
new
在自由空间
分配内存
,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。.
C++中
int
* a =
new
int
(10)与
int
* a =
new
int
[10]的区别
C++中
int
* a =
new
int
(10)与
int
* a =
new
int
[10]的区别 1.
int
* a =
new
int
(10)表示申请一个内存空间,存放的初值是10。释放:delete a; 2.
int
* a =
new
int
[10]表示申请一个存放十个元素的数组。释放:delete[] a;
int
*p和(
int
*)p的区别;返回多个值给主函数的做法;
int
*p=
new
int
[n]的用法;
int
*p = (
int
*)malloc(n*sizeof(
int
))的含义
int
*p和(
int
*)p的区别 (
int
**)p;//强制将变量p转换成指向
int
类型指针变量的 指针(转换后p是指向指针的指针) (
int
*) *p;//强制将变量 *p 转换成指向
int
类型的指针变量,(*p当成整体做强制转换,这么看来,p也可能是一个指向指针的指针) *(
int
)p;//强制将变量p转换成指向
int
类型变量的指针,再取这个指针变量指向的值;相当于((
int
...
c++中
int
a,
int
*a=
new
int
和
int
*a=
new
int
()
首先有以下3条代码:
int
a1;
int
*a2=
new
int
;
int
*a3=
new
int
(); 这里分一个情况来讨论,似乎c++ 98中和c++11中情况不同,分别输出这些参数,会发现 c++11中每次输出时,均是0,因此这三条效果上等价,但是第一条是分配在栈空间中,而后面两条则是在堆空间中。 但根据网上的资料,博主并未进行尝试,在c++ 98的编译器中,这三条是不同的,
Java SE
62,621
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章