社区
Java SE
帖子详情
int[] a = new int[123]的分配内存方式
xuhaohotmail
2010-01-15 09:13:16
new int[123]是新建一个对象,还是123个int型变量
int[] a是一个引用,还是123个变量名
内存中空间分配是,堆中开辟一个对象空间,栈中开辟一个对象引用空间
还是栈中开辟123个int型变量空间
...全文
402
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](); 区别
本文详细解析了C++中使用
new
操作符
分配内存
时的不同
方式
及其效果,特别是针对数组对象的初始化过程。通过对比
int
*p1=
new
int
[10];与
int
*p2=
new
int
[10]();的区别,说明了在C++中如何对动态分配的数组进行默认初始化。
int
*p1 =
new
int
[10];
int
*p2 =
new
int
[10](); 区别
本文深入探讨C++中
new
操作符的使用,解析
new
在单个对象与数组分配中的不同行为,以及如何通过添加空括号实现值初始化。通过对比
int
*p1=
new
int
[10];与
int
*p2=
new
int
[10]();,阐述了对象初始化的重要性。
C++中
int
* a =
new
int
(10)与
int
* a =
new
int
[10]的区别
本文详细解释了C++中两种不同的内存分配
方式
:使用
new
int
(10)为单个整数
分配内存
,并初始化为10;使用
new
int
[10]分配一个可以存储十个整数的数组。同时介绍了它们对应的释放内存的方法。
int
*p和(
int
*)p的区别;返回多个值给主函数的做法;
int
*p=
new
int
[n]的用法;
int
*p = (
int
*)malloc(n*sizeof(
int
))的含义
本文详细解析了C++中指针的多种用法,包括
int
指针、指向指针的指针以及动态内存分配。通过实例展示了如何使用
new
和malloc
分配内存
,以及返回多个值的不同方法,如使用指针、全局变量、函数参数和长整型数值。
c++中
int
a,
int
*a=
new
int
和
int
*a=
new
int
()
本文探讨了C++98与C++11中三种不同的内存分配
方式
:直接定义变量、使用
new
分配内存
而不调用构造函数、使用
new
并调用默认构造函数。详细分析了这两种标准下变量的初始化行为差异及其原因。
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章