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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© (_演绎、青春 中级黑马   /  2014-5-26 12:03  /  7481 人查看  /  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 个回复

正序浏览
夏日蓝雪 发表于 2014-5-27 17:59
这个问题应该类同于 String str="abc"与 String str1=new String("abc")的区别吧?String类也相当于数组, ...

String str="abc"其实就等于  String str=new String("abc");   str对象一旦创建,就会在推内存中有个“abc”当你下次再去  str1 =new String("abc")的时候,其实就只是把  内存中已经有的abc的内存地址的引用给了str1
回复 使用道具 举报
int[] arr = int[]{2,3,4,5,6}:在堆内存中先开辟了一个空间,然后这个空间有个默认的长度值,在读取后面{}中的内容,给数组长度重新赋值。

int[] arr = {2,3,4,5,6}:在同样堆内存中开辟一个空间,但是直接就把长度赋值为5
不知道对不对?
回复 使用道具 举报
夏日蓝雪 发表于 2014-6-12 17:27
亲自试验了一下,代码如下:

class Practise

学习了。。。。谢谢
回复 使用道具 举报
学习了,这样的帖子恨有价值
回复 使用道具 举报
夏日蓝雪 发表于 2014-6-12 17:27
亲自试验了一下,代码如下:

class Practise

是因为String类中的equals方法是被覆写过的
回复 使用道具 举报
int[] a=new int[] {2,3,4,5,6}和int [] a1= {2,3,4,5,6} 区别其实是:第一个其实在内存中开辟了两个空间即是指向了两个对象,第二个只指向了一个对象,和字符串String类似,String b="abc"   String c=new String("abc");所以用a.equals(a1)会返回false,但是在字符串中用b.equals(c)会返回true是因为在String类中已经重新定义了Object类中的equals()方法,比较的是其中的值而不是地址了。(参考)
回复 使用道具 举报
夏日蓝雪 发表于 2014-5-26 14:56
两个表达式创建的实体都是在堆里,它们的区别如下:
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在堆内存 ...

直观些看,System.out.println(arr);System.out.println(arr1);会发现打印的哈希值是不一样的
回复 使用道具 举报
被整死了
回复 使用道具 举报
出现new字应该是创建对象了,没有new应该不是创建对象的,具体不清楚。。
回复 使用道具 举报
    学习了!
回复 使用道具 举报
学习下,看看涉及到什么样的问题才给技术分
回复 使用道具 举报
越看越糊涂了 谁的答案是正确的呀
回复 使用道具 举报
(_演绎、青春 发表于 2014-6-14 23:26
谢谢你。解答太完美了

:handshake,不客气。
回复 使用道具 举报
夏日蓝雪 发表于 2014-6-12 17:31
sorry,关于数组的一个小问题,我的回答有误,请重新看一下28楼的解释。

谢谢你。解答太完美了:handshake
回复 使用道具 举报
alive 中级黑马 2014-6-12 22:41:35
30#
C:\Users\Administrator\Desktop\QQ截图20140612223734.png
空间地址不一样,所以说是两个对象,不会到堆里去找有没有实体
回复 使用道具 举报
最后一个问题是:可以。他们两是同样的内容,但是存储的位置不一样。一个存new的地址,一个存实体
回复 使用道具 举报
Jero 发表于 2014-5-27 19:40
2楼对java理解很透彻。学习了。

sorry,关于数组的一个小问题,我的回答有误,请重新看一下28楼的解释。
回复 使用道具 举报

sorry,关于数组的一个小问题,我的回答有误,请重新看一下28楼的解释。
回复 使用道具 举报
亲自试验了一下,代码如下:

class Practise
   {
   public static void main(String[] args)
   {
           int [] arr = new int[]{3,1,6,8,2,5};
           int [] arr1 ={3,1,6,8,2,5};
           System.out.println(arr.equals(arr1));//结果false
          
           String[] aa=new String[]{"aa","bb","cc"};
           String[] bb={"aa","bb","cc"};
           System.out.println(aa.equals(bb));//结果false
          
           String a="abc";
           String b=new String("abc");
           String c=new String("abc");
           System.out.println(a==b);//结果false
           System.out.println(a.equals(b));//结果true
           System.out.println(b.equals(c));//结果true
           System.out.println(a.equals(c));//结果true
   }
   }
    实验证明,String类是一个特殊的类,只有它存在我在二楼解释的区别;
而其他类即使是字符类型的数组也没有区别,只是写法上的不同而已。
    确实是我理解有误,在这里向所有被我误导的同胞们道歉,同时要感谢不一样的颜色对我的点评,才让我发现自己对知识理解的错误。
回复 使用道具 举报 2 0
好多细节都是新手发现的
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马