黑马程序员技术交流社区

标题: 定义好数组的长度之后,未定义数组元素,默认的都是0吗? [打印本页]

作者: dongyangzhang    时间: 2013-6-10 22:56
标题: 定义好数组的长度之后,未定义数组元素,默认的都是0吗?
本帖最后由 dongyangzhang 于 2013-6-11 12:47 编辑

int[] arr = new int[10];//请把这行代码详细解释下?谢谢
System.out.println(arr[1]);


作者: 杨增坤    时间: 2013-6-10 23:10
int[] arr = new int[10];
这是定义了一个数组,长度为10的,其中的默认的都是0,因为是整形,默认值是0,如果是字符串的类型,其中的默认值是null, 在内存中分配了10个存放整形的空间。希望对你有所帮助。
作者: 李晓峰    时间: 2013-6-10 23:12
本帖最后由 李晓峰 于 2013-6-10 23:14 编辑

不一定,如果数组的类型是类类型的,元素默认值为:null;
              如果数组的类型是double型,元素默认值为:0.0;              数组类型为int,short,long型,元素默认值为:0;
              boolean类型的数组,元素默认值为false。


作者: 尹丽峰    时间: 2013-6-10 23:12
new数组时候都是在堆内存中,如果不赋初始值,默认 int[]数组进去是0,String 是null
作者: 张歆明    时间: 2013-6-10 23:18
int[] arr = new int[10];//请把这行代码详细解释下?谢谢

赋值表达式  运行方向 从右向左  
所以 先执行new int[10];
一看见new  就知道 在堆内存中开辟空间   
分配数组内存首地址  
数组特点就是 开辟连续的内存空间 这里面是开辟了10个连续的内存空间 每个空间存放的元素类型就是int
因为 是在堆内存中开辟的  所以 存在里面的变脸都有默认值 所以 要进行默认初始化  (int 类型 默认是0  float默认是0.0f double默认 0.0 引用类型  默认 null 这些默认值 同样适用于 类的对象中的成员变量)  
这时候 右边表达式执行完毕
最后  数组的首地址赋值给左边在栈中定义的局部变量 int[]类型的引用变量 arr 所以 arr中的值就是对应数组在堆内存中的首地址


作者: 李征    时间: 2013-6-10 23:27
int[] arr = new int[10];
这句话是这样:
1. 在栈内存中开辟一个空间存放引用类型arr。
2.在堆内存中开辟一个连续的空间,用来存放数组,具体根据你的类型和长度来划分,你这里是长度为10,角标为0-9,默认值全部为0。
3.把堆内存中对象的首地址赋值给栈内存中的arr,使其指向堆内存中的对象。
我也在学习中,一起努力吧
作者: dongyangzhang    时间: 2013-6-11 12:47
谢谢大家




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