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