黑马程序员技术交流社区

标题: java基础 定义数组 [打印本页]

作者: 原子弹    时间: 2014-3-6 01:55
标题: java基础 定义数组
//定义一个数组
int[] arr=new[]{1,2,3};
new 是在堆里面常见实体
哪像这样定义数组  int[] arr = {4,5,6}  没有new的时候怎么解释呢是不是就是没有创建实体

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




作者: 原子弹    时间: 2014-3-6 12:09
牛头人图腾 发表于 2014-3-6 07:47
1、创建数组有两种表现形式:
(1)元素类型[] 变量名 = new 元素类型[元素的个数];
(2)元素类型[] 变量 ...

谢谢   就是说没有new   也能开辟储存空间是吧?
作者: 牛头人图腾    时间: 2014-3-6 12:27
原子弹 发表于 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这些数据,而在栈内存中产生一个地址空间记录该数组的首地址值。由于引用数据类型一创建通常会开辟多个地址空间,而且它们都有内在联系的,我们把它形象化称为实体。其实,实体是人为提出的一种方便理解的说法(我认为)。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2