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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

哪位理解透的说说有什么区别

4 个回复

倒序浏览
这个真的说不好,其实new一个数组是包含在new一个对象里面的,通常我们不叫new一个数组,而是叫new一个数组对象
回复 使用道具 举报
当然是不一样的
  首先new可以动态分配,打个比方,大家都上163,那么就可以每来一个人,
就给他new一个记录,记录他来了多长时间。
  而如果不这样的话,你就要提前声明一个静态数组,那他该有多长?1000?10000?
我只是打个比方,网站并没有这样做。

希望对楼主有所帮助
回复 使用道具 举报
new一个基本数据类型的数组 “new int[]” 跟new一个对象没什么区别啦,JVM会把基本数据类型数组当成一个对象看待,不会把拆开数组。
如果是对象类型的数组时,JVM会将它看成new了多个对象。
回复 使用道具 举报
根据反复认真听老毕同志的讲解,与我自己的实验,我是这样理解数组的。
1:java把一个数组当成一个对象来看待。数组和对象都是存放在堆内存中,所以每一个数组和每一个对象一样都有其相应的哈希值。
验证:楼主可以用打印语句分别打印数组与对象本身,可以看到他们各自的哈希值。
-------
2:它们的差别在于它们存放的数据结构不同,这可能也是数组作为对象的特殊之处。
很遗憾,这个我现在没有办法验证,只是简单的理论推导。
------
3:如果数组是对象类型的数组,其实它里面存放的也不是对象,而是堆内存中对应对象的引用。
验证:楼主可以new一个对象类型的数组,并将每一个数组元素都new一个对象,再分别打印数组本身与每一个元素本身,你会发现全是哈希值。
------
4:其实验证数组到底是不是对象,还有一个很简单的方法,那就是看它有没有上帝类Object中所有的同名方法。如果一个数组不具备object 类所有的同名方法,那只能说明我上面说的全是废话。
怎么样楼主,我说的很明白了吧,现在楼主应该能理解吧。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马