黑马程序员技术交流社区

标题: 关于数组的小问题 [打印本页]

作者: 王红潮    时间: 2012-8-27 00:09
标题: 关于数组的小问题
  1. {
  2. public static void main(String[] args)
  3. {
  4. int[] arr = {3,4,2,1,5,32};
  5. arr = {4,3,2};
  6. }
  7. }
复制代码
为什么会提示错误,但是当改成 arr=null; 时就没错了?

作者: 杨鹏鹏    时间: 2012-8-27 00:25
编译的时候编译器不知道params 的类型,所以才报错。如果这种写法正确,看看下面的写法:
Object[] params;
params = {"1","2","3"};//这个地方有歧义,Object类型还是String类型
作者: 乔九    时间: 2012-8-27 00:35
int[] arr = {3,4,2,1,5,32};已经初始化此时arr指向 {3,4,2,1,5,32}这个数组,此时arr应像一个指针指向的应给是一个地址
作者: べ戀¢豬そ☆    时间: 2012-8-27 01:35

要明白数组是怎么进内存空间的,
首先,栈内存中加载主函数,这时主函数中有一数组名arr,然后再堆内存中开辟一空间,存储数组{3,4,2,1,5,32},数组元素首地址设其为0x0089,这时将首地址告诉栈内存中的arr,然后arr指向堆内存中的数组;而当arr=(4,3,2}时,在堆内存中再开辟一块空间存储数组{4,3,2};这数组元素的首地址另设为0x0034,这时本该把这个地址告诉栈内存中的arr,可arr在之前已经指向上面那一数组了,不能再指向下面的数组,所以编译会失败。如图

MR}{D2]S2NON}Q~8AWZ@U%A.jpg (22.41 KB, 下载次数: 64)

MR}{D2]S2NON}Q~8AWZ@U%A.jpg

作者: 史龙贤    时间: 2012-8-27 01:51
哥们,你犯了一个常识的错误。数组名字其实是一段连续内存的首地址,你把几个数字赋值给首地址当然会报错了,都没有空间来装它们。arr=null表明指针可以指向空的,也就是不指向任何地方,在java中是可以的。
作者: 乔九    时间: 2012-8-27 08:27
qiaojiu9 发表于 2012-8-27 00:35
int[] arr = {3,4,2,1,5,32};已经初始化此时arr指向 {3,4,2,1,5,32}这个数组,此时arr应像一个指针指向的 ...

正在申请呢
作者: 王红潮    时间: 2012-8-27 11:23
史龙贤 发表于 2012-8-27 01:51
哥们,你犯了一个常识的错误。数组名字其实是一段连续内存的首地址,你把几个数字赋值给首地址当然会报错了 ...

有些明白了,谢谢啊!
作者: 史龙贤    时间: 2012-8-27 21:59
有些明白了,那还有些不明白的地方呢,帮我人喜欢帮到底,再提问吧,彻底明白才行啊!




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