黑马程序员技术交流社区
标题:
关于数组的几个问题
[打印本页]
作者:
王廷顺
时间:
2013-5-3 16:16
标题:
关于数组的几个问题
本帖最后由 王廷顺 于 2013-5-4 19:20 编辑
数组类型的变量是不是一个引用;如果是,那么数组可以看成是一个对象,怎样理解这个对象呢。
作者:
金辉
时间:
2013-5-3 17:08
1、数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用。数组保存的仅仅是对象的引用,而不是对象本身。
2、数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
作者:
海不扬波
时间:
2013-5-3 17:16
数组是引用类型,当声明数组时,编辑器就会在栈内存中分一块,数组名变量具体的值是堆内存数组下标0的内存地址。
作者:
chouwayメ
时间:
2013-5-3 18:00
首先:数组是相同类型量的集合。
type [] a=new type [];实际上是分两步走的,
第一步,在栈内存创建一个指示数组数据类型的局部变量a,它的值被设置为空;
第二步,通过new运算符在堆内存上为数组动态分配空间,并通过“=”把该数组的地址赋给了a。
所以呢a ,是数组“引用”变量。至于要把数组理解成对象。。。同求大神分析了
作者:
随风而去
时间:
2013-5-3 21:01
class Test{
char[] a ={'a','b','c'};
public static void main (String[] args) {
Test t = new Test();
// t.a =new char[] {'d','e','f'};
char[] b= t.a;
b[0] ='e';
t.change(t.name,b);
}
public void change(char[] c){
System.out.println("this.a:"+this.a+" "+a[0] ); // a[0] =='e';
a[0] ='d';
System.out.println("c:"+c+" "+c[0] ); //c[0] == 'd'
}
}
综上所述 数组据有对象传递的所有特点 因此 结果显而易见
你可以试试用个对象来用上面的方法再敲上一遍得以求证 对了 还有一句话 就是java是值传递 当最初的值改变时 后边赋予的值(都等同过同一值 像上
面数组的 char[] b= t.a;
b[0] ='e';
就是这个意思
)也会跟着改变 反过来也成立
作者:
施祖喜
时间:
2013-5-3 23:53
Lz你这个问题貌似问的是对象的概念哦
数组肯定的是一个引用数据类型,至于为什么你还是别问,因为它就是这么定义的,
怎去理解他是个对象,你可以把数组中的数据看成是对象的属性,要调用就是对象[属性] b.name; b[0]; 也可以是数组就一个盒子,盒子这个对象里装的是颜色相同(数据类型相同)都编号(数组的角标)的小球(数据的具体内容),至于里面的球怎么放的,怎么放进去的就不管了,我要取数据用就是找几号球,数组名 [小球的编号];
作者:
曹睿翔
时间:
2013-5-4 07:09
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者:
王廷顺
时间:
2013-5-4 19:20
施祖喜 发表于 2013-5-3 23:53
Lz你这个问题貌似问的是对象的概念哦
数组肯定的是一个引用数据类型,至于为什么你还是别问,因为它就是这 ...
你的比喻很形象,看过后也更容易理解了,非常感谢。
作者:
王廷顺
时间:
2013-5-4 19:20
谢谢大家的解答,我懂了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2