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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王廷顺 中级黑马   /  2013-5-3 16:16  /  1398 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王廷顺 于 2013-5-4 19:20 编辑

数组类型的变量是不是一个引用;如果是,那么数组可以看成是一个对象,怎样理解这个对象呢。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1

查看全部评分

9 个回复

倒序浏览
1、数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用。数组保存的仅仅是对象的引用,而不是对象本身。
2、数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
回复 使用道具 举报
数组是引用类型,当声明数组时,编辑器就会在栈内存中分一块,数组名变量具体的值是堆内存数组下标0的内存地址。
回复 使用道具 举报
首先:数组是相同类型量的集合。
type [] a=new type [];实际上是分两步走的,
第一步,在栈内存创建一个指示数组数据类型的局部变量a,它的值被设置为空;
第二步,通过new运算符在堆内存上为数组动态分配空间,并通过“=”把该数组的地址赋给了a。
所以呢a ,是数组“引用”变量。至于要把数组理解成对象。。。同求大神分析了

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 新人加油

查看全部评分

回复 使用道具 举报
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';       
就是这个意思
)也会跟着改变 反过来也成立
回复 使用道具 举报
Lz你这个问题貌似问的是对象的概念哦
数组肯定的是一个引用数据类型,至于为什么你还是别问,因为它就是这么定义的,
怎去理解他是个对象,你可以把数组中的数据看成是对象的属性,要调用就是对象[属性]     b.name;    b[0];  也可以是数组就一个盒子,盒子这个对象里装的是颜色相同(数据类型相同)都编号(数组的角标)的小球(数据的具体内容),至于里面的球怎么放的,怎么放进去的就不管了,我要取数据用就是找几号球,数组名 [小球的编号];
回复 使用道具 举报

如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
施祖喜 发表于 2013-5-3 23:53
Lz你这个问题貌似问的是对象的概念哦
数组肯定的是一个引用数据类型,至于为什么你还是别问,因为它就是这 ...

你的比喻很形象,看过后也更容易理解了,非常感谢。
回复 使用道具 举报
谢谢大家的解答,我懂了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马