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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

还好 不知道谁对谁错
回复 使用道具 举报
学习了,刚开始我也以为是一样的,看了二楼的解释想通了。
回复 使用道具 举报
这么跟你说,String a = "abcd"; 和String a = new String("abcd"); ,,这和你说的性质是一样的,如果不new,String先会从常量池中找是否有“abcd”,若有,则指向他,若没有,建立一个,而对于new,则是在堆中从新建立一个abcd的内存区。
希望对你有所帮助!
回复 使用道具 举报
两个是一样的,写法不同而已。
回复 使用道具 举报
x923601616 发表于 2014-6-3 14:06
java的悖论 java建立的时候 想做成一切皆对象的(这点c#做到了)
但是又继承了很多面向过程的语法 比如int类 ...

很透彻,谢哥们儿:handshake
回复 使用道具 举报
好多细节都是新手发现的
回复 使用道具 举报
亲自试验了一下,代码如下:

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

sorry,关于数组的一个小问题,我的回答有误,请重新看一下28楼的解释。
回复 使用道具 举报
Jero 发表于 2014-5-27 19:40
2楼对java理解很透彻。学习了。

sorry,关于数组的一个小问题,我的回答有误,请重新看一下28楼的解释。
回复 使用道具 举报
最后一个问题是:可以。他们两是同样的内容,但是存储的位置不一样。一个存new的地址,一个存实体
回复 使用道具 举报
alive 中级黑马 2014-6-12 22:41:35
31#
C:\Users\Administrator\Desktop\QQ截图20140612223734.png
空间地址不一样,所以说是两个对象,不会到堆里去找有没有实体
回复 使用道具 举报
夏日蓝雪 发表于 2014-6-12 17:31
sorry,关于数组的一个小问题,我的回答有误,请重新看一下28楼的解释。

谢谢你。解答太完美了:handshake
回复 使用道具 举报
(_演绎、青春 发表于 2014-6-14 23:26
谢谢你。解答太完美了

:handshake,不客气。
回复 使用道具 举报
越看越糊涂了 谁的答案是正确的呀
回复 使用道具 举报
学习下,看看涉及到什么样的问题才给技术分
回复 使用道具 举报
    学习了!
回复 使用道具 举报
出现new字应该是创建对象了,没有new应该不是创建对象的,具体不清楚。。
回复 使用道具 举报
被整死了
回复 使用道具 举报
夏日蓝雪 发表于 2014-5-26 14:56
两个表达式创建的实体都是在堆里,它们的区别如下:
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在堆内存 ...

直观些看,System.out.println(arr);System.out.println(arr1);会发现打印的哈希值是不一样的
回复 使用道具 举报
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()方法,比较的是其中的值而不是地址了。(参考)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马