黑马程序员技术交流社区
标题:
解决一个误导人的数组问题。。。
[打印本页]
作者:
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