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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 静默小和尚 中级黑马   /  2015-4-5 10:29  /  1497 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

{:3_47:}昨晚为了做那个抢分题,弄了半夜,结果论坛半夜居然上不去!{:3_55:}闲话不扯,来说说这个吧!
先看下面这个:
             String str1 = "abc";
             String str2 = "abc";
             
             System.out.println(str1.equals(str2));
             System.out.println(str1==str2);
             
             System.out.println("-------------------------------------------------------");
             
             String str3 = new String("abc");
             String str4 = new String("abc");
             
             System.out.println(str3.equals(str4));
             System.out.println(str3==str4);


有兴趣可以自己运行一下,这个结果是
TRUE TRUE TRUE FALSE
{:3_51:}有没有很郁闷!哈哈哈

其实是因为==是判断的地址啦,equala是判断的变量内容 ,所以看上面的代码能清楚发现,str1  str2 地址是一样的,而str3 str4都是new 新建的地址,不一样的啦,这样说应该比较容易理解吧,至于内容,{:3_51:}同一个地址,能存同时存两个不同的内容吗?答案当然是不能啦!
然后说下昨晚那个陷阱题目  
{:3_60:}Integer i1 = 122;
      Integer i2 = 122;
     System.out.println(i1.equals(i2));(输出1)
     System.out.println(i1 == i2);(输出2)
     Integer i3 = 128;
     Integer i4 = 128;
     System.out.println(i3.equals(i4));(输出3)
     System.out.println(i3 == i4);(输出4)


陷阱在于  Integer有范围啊,-128到127,所以122是可以,128就是新建地址,类似于str3 str4{:3_55:}最讨厌陷阱神马的,明明很简单,不懂的时候就纠结要死。这个给我们新学的童鞋们来探讨啦,欢迎留贴心得!{:3_51:}{:3_51:}

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 这个不是周末技术活动吗?

查看全部评分

14 个回复

倒序浏览
==比较的是地址值,equals比较的是内容,integer和byte范围一样吗,都是-128到127?
回复 使用道具 举报
9494,,,你讲的耶不太清楚!我从新看了视频的,128是因为超出了byte 范围,而byte的值是在常量池里。即使从新new了,也是在常量池复制一份过来!故是一样的,
前面的题也是一样,String也在先在常量池找(把3的abc一边再复制一份给赋值4的abc,其实abc的引用是一样的),但是他们在堆内存的地址是不一样的!
回复 使用道具 举报
帆风顺 发表于 2015-4-5 10:54
==比较的是地址值,equals比较的是内容,integer和byte范围一样吗,都是-128到127? ...

Integer和byte  是2个概念   
只有覆写了Object的equals才比较的是自定义的。  没有覆写源码里默认用的是==。通过比较我们知道Integer是覆写了的。  -128 到127.是有这么个缓冲区里存储了这个范围的数字。如果数值没有超过这个范围。就直接在缓冲里取。所以地址才会一样
回复 使用道具 举报
王振光 发表于 2015-4-5 11:19
Integer和byte  是2个概念   
只有覆写了Object的equals才比较的是自定义的。  没有覆写源码里默认用的 ...

哇 学得 好强啊,你技术分都28了!
回复 使用道具 举报
多看看视频吧
回复 使用道具 举报
楼主很强大!
回复 使用道具 举报
一起学习学习~~!
回复 使用道具 举报
这道题,昨天老师刚讲了一下。再巩固巩固
回复 使用道具 举报
==比较的是地址值,equals判断两个字符串是否相等
回复 使用道具 举报
好好学习天天向上。
回复 使用道具 举报
好好学习天天向上。
回复 使用道具 举报
你这,好吧,谢谢了
回复 使用道具 举报
学习一下
回复 使用道具 举报
学习了,不错!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马