黑马程序员技术交流社区

标题: 解决一个误导人的数组问题。。。 [打印本页]

作者: as604049322    时间: 2014-12-13 21:29
标题: 解决一个误导人的数组问题。。。
原帖:http://bbs.itheima.com/thread-119569-1-1.html
今天看了该贴,发现原来有这么多人被误导了。其实我也差点被误导。
int [ ] arr = new int [ ] {3,1,6,8,2,5};
int [ ] arr = {3,1,6,8,2,5};

这2个代码到底是不是一个意思呢?其实是一样的,都是在堆内存中开辟空间建立一个新的数组对象 {3,1,6,8,2,5}
的数组对象。有的人拿数组对象与String类作对比,说
int [ ] arr = {3,1,6,8,2,5};//虚拟机先查找有没有{3,1,6,8,2,5}这个实体,有,则arr直接指向实体,没有,则重新创建实体。
这是天大的误区,java对于String、Double、Float、Integer 等包装基本类型的对象才会用一个常量池进行存储,
而数组这中类型,java是不会在常量池中建立数据的。
所以int [ ] arr = {3,1,6,8,2,5}就等价于int [ ] arr = new int [ ] {3,1,6,8,2,5},这是java的自动处理。
但是
不可以直接将{3,1,6,8,2,5}作为参数传递给函数,或者作为返回值
因为Java不识别,没有进行new int [ ]的自动处理。

作者: d7142947    时间: 2014-12-13 22:56

支持   感谢  分享
作者: 7788665544    时间: 2014-12-13 23:04
支持! 顶一个!
作者: 红楼    时间: 2014-12-13 23:10
原来只是知道这两个方式都可以定义,原来还有这么多的讲究
作者: 雨过山更翠    时间: 2014-12-14 00:09
谢谢分享,,
作者: 默默丶    时间: 2014-12-14 08:55
这是不一样的
第一个是有了两个对象
而第二个只有一个对象
第一个是有一个这个数组对象 。然后new一个将这个数组对象丢进去
而第二个是直接指向这一个数组对象   
他们的引用地址是不一样的
作者: 呢?    时间: 2014-12-14 09:23
原来如此~~~




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