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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© (_演绎、青春 中级黑马   /  2014-5-26 12:03  /  7824 人查看  /  47 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 (_演绎、青春 于 2014-5-26 12:19 编辑

int [ ] arr = new int [ ] {3,1,6,8,2,5};
int [ ] arr = {3,1,6,8,2,5};

它们两个是不是一个意思啊,一个性质啊?都是在堆内存里面建立的?
省去new int [ ]也可以的吗?

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

47 个回复

倒序浏览
两个表达式创建的实体都是在堆里,它们的区别如下:
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在堆内存中重新开辟一块空间
int [ ] arr = {3,1,6,8,2,5};//虚拟机先查找有没有{3,1,6,8,2,5}这个实体,有,则arr直接指向实体,没有,则重新创建实体。

点评

理解有误,请重新看28楼的理解。  发表于 2014-6-12 17:35
int [ ] arr = new int [ ] {3,1,6,8,2,5}; int [ ] arr1 = {3,1,6,8,2,5}; System.out.println(arr == arr1);就应该返回TRUE但是返回的结果是false  发表于 2014-6-12 02:30
perfect  发表于 2014-5-27 18:34

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报 5 1
楼上说的很对
回复 使用道具 举报
学习学习~~
回复 使用道具 举报
夏日蓝雪 发表于 2014-5-26 14:56
两个表达式创建的实体都是在堆里,它们的区别如下:
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在堆内存 ...


应该是一样的,怎么可能去查找实体,数组创建分配空间,都是新建的空间,难道有其它数组也是这个值,它们两个会指向同一个分配空间
   只是写法的不同而己
回复 使用道具 举报
本帖最后由 夏日蓝雪 于 2014-5-27 18:01 编辑
向前看向前走 发表于 2014-5-26 16:01
应该是一样的,怎么可能去查找实体,数组创建分配空间,都是新建的空间,难道有其它数组也是这个值,它们 ...

这个问题应该类同于 String str="abc"与 String str1=new String("abc")的区别吧?String类也相当于数组,而有没有new这一关键字,最主要区别就体现在是否在堆区重新创建了实体。是不是?
回复 使用道具 举报
夏日蓝雪 发表于 2014-5-27 17:59
这个问题应该类同于 String str="abc"与 String str1=new String("abc")的区别吧?String类也相当于数组, ...

我还没看到你说的那呢 呵呵
回复 使用道具 举报
Jero 中级黑马 2014-5-27 19:40:14
8#
2楼对java理解很透彻。学习了。
回复 使用道具 举报
(_演绎、青春 发表于 2014-5-27 19:36
我还没看到你说的那呢 呵呵

nothing,共同努力,共同进步!
回复 使用道具 举报
学习了!
回复 使用道具 举报
夏日蓝雪 发表于 2014-5-27 19:47
nothing,共同努力,共同进步!

:handshake:loveliness:
回复 使用道具 举报
学习了,正在学数组。
回复 使用道具 举报
lin' 初级黑马 2014-5-29 09:01:38
13#
可以的,创建数组有可以创建时赋值的方式也有不赋值的方式,创建时赋值new int(strinag)可以默认不写,写了也是一样
回复 使用道具 举报 1 0
int[] arr={1,2,3,4}这中方式只适用于数组的初始化,也就是说当你写了int[] arr={1,2,3,4}后,在写arr={2,4,6,8}后就会报错。而 int [] arr = new int[]{}这种方式不会。
回复 使用道具 举报
夏日蓝雪 发表于 2014-5-26 14:56
两个表达式创建的实体都是在堆里,它们的区别如下:
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在堆内存 ...

int [ ] arr = new int [ ] {3,1,6,8,2,5};
虚拟机先查找有没有{3,1,6,8,2,5}这个实体,有,则arr直接指向实体,没有,则重新创建实体。
还有这一层含义的吗??毕老师怎么没说过啊??
回复 使用道具 举报
27ZJQ 来自手机 中级黑马 2014-5-30 17:12:29
16#
2楼说的到底对不对?
回复 使用道具 举报
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在栈内存中开辟空间存放变量arr,在堆内存中开辟空间分配首地址,并创建连续区间,初始化。首地址赋值给arr
int [ ] arr = {3,1,6,8,2,5};//在常量池中存放{3,1,6,8,2,5},在栈内存中开辟空间存放变量arr,初始化。首地址赋值给arr
回复 使用道具 举报
常量池这概念还没到,我是该信2楼的初级黑马还是相信17楼的中级黑马呢?
回复 使用道具 举报
夏日蓝雪 发表于 2014-5-26 14:56
两个表达式创建的实体都是在堆里,它们的区别如下:
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在堆内存 ...

学习了。。。。
回复 使用道具 举报
学习了。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马