黑马程序员技术交流社区

标题: new一个数组和new一个对象原理是不是一样的 [打印本页]

作者: 炉海佳    时间: 2013-2-8 16:15
标题: new一个数组和new一个对象原理是不是一样的
哪位理解透的说说有什么区别
作者: 涂春保    时间: 2013-2-8 16:41
这个真的说不好,其实new一个数组是包含在new一个对象里面的,通常我们不叫new一个数组,而是叫new一个数组对象
作者: pzfpang449    时间: 2013-2-8 17:55
当然是不一样的
  首先new可以动态分配,打个比方,大家都上163,那么就可以每来一个人,
就给他new一个记录,记录他来了多长时间。
  而如果不这样的话,你就要提前声明一个静态数组,那他该有多长?1000?10000?
我只是打个比方,网站并没有这样做。

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





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