A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 原子弹 中级黑马   /  2014-3-6 01:55  /  1072 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//定义一个数组
int[] arr=new[]{1,2,3};
new 是在堆里面常见实体
哪像这样定义数组  int[] arr = {4,5,6}  没有new的时候怎么解释呢是不是就是没有创建实体

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
1、创建数组有两种表现形式:
(1)元素类型[] 变量名 = new 元素类型[元素的个数];
(2)元素类型[] 变量名 = {元素1,元素2...};
2、不一定要写new才还会创建实体,第二种表现形式也会创建实体。所谓创建实体,其实就是在内存中开辟一个或几个地址空间,这些地址空间是有内在联系的,方便理解就把它们联结起来称作一个实体。
3、int[] arr = {4,5,6}。会在堆内存中产生3个存储int型数据的连续地址空间,它们是有联系的,所属于同一个数组,方便理解把其叫做实体。创建对象时也会在内存中产生一个实体,其实就是在内存中开辟一个或几个地址空间,不一定是连续的,而这几个地址空间所属于一个对象,我们可以形象化的把其称作实体。实体是形象化的说法。



评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
牛头人图腾 发表于 2014-3-6 07:47
1、创建数组有两种表现形式:
(1)元素类型[] 变量名 = new 元素类型[元素的个数];
(2)元素类型[] 变量 ...

谢谢   就是说没有new   也能开辟储存空间是吧?
回复 使用道具 举报
原子弹 发表于 2014-3-6 12:09
谢谢   就是说没有new   也能开辟储存空间是吧?

是的!像String s = “abc”没用new它也是创建了一个对象,也即产生一个实体。1、基本数据类型产生的地址空间在栈内存,例int a = 3,会在栈内存产生一个存储int型的地址空间,而3就被保存在该地址空间里。2、对于引用型数据类型,通常会产生多个地址空间,通常会在堆内存产生,像String这些在方法区的常量池产生,也可以在堆内存产生。例:int[] arr = {3,1,4},会在堆内存产生3个地址空间存储3,1,4这些数据,而在栈内存中产生一个地址空间记录该数组的首地址值。由于引用数据类型一创建通常会开辟多个地址空间,而且它们都有内在联系的,我们把它形象化称为实体。其实,实体是人为提出的一种方便理解的说法(我认为)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马