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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© as604049322 金牌黑马   /  2014-12-13 21:29  /  970 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

原帖: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 [ ]的自动处理。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

6 个回复

正序浏览
呢? 中级黑马 2014-12-14 09:23:21
7#
原来如此~~~
回复 使用道具 举报
这是不一样的
第一个是有了两个对象
而第二个只有一个对象
第一个是有一个这个数组对象 。然后new一个将这个数组对象丢进去
而第二个是直接指向这一个数组对象   
他们的引用地址是不一样的
回复 使用道具 举报
谢谢分享,,
回复 使用道具 举报
原来只是知道这两个方式都可以定义,原来还有这么多的讲究
回复 使用道具 举报
支持! 顶一个!
回复 使用道具 举报

支持   感谢  分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马