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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hamiguadjs 中级黑马   /  2014-5-25 11:17  /  1628 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hamiguadjs 于 2014-5-26 23:28 编辑
  1. public static void main(String[] args) {
  2.                 StringBuffer buffer = new StringBuffer("hello");
  3.                 System.out.println(buffer);
  4.                 StringBuilder builder = new StringBuilder("hello");
  5.                 System.out.println(builder);
  6.                 String s = "hello";
  7.                 System.out.println(s);
  8.                 System.out.println(s.equals(buffer));
  9.                 System.out.println(builder.equals(buffer));                                
  10.         }
复制代码

      在以上的代码中,大家先猜猜结果是什么?

5 个回复

倒序浏览
hello hello  hello false false   我想说我又学到知识了
回复 使用道具 举报
       我的理解,我认为String/StringBuffer/StringBuiler都是对字符串操作的类,当调用方法equals()的时候,内容相同就应该返回的结果是true,但以上的结果却是相反的,不解,有谁能说明原因吗?
回复 使用道具 举报
hello hello  hello false false   我给你解释一下吧,前三个hello不解释了行么,System.out.println(s.equals(buffer));这句话是一个String 对象调用的equals方法,你去JDK看一下String的equals的源码他首先判断是不是同一个对象调用的,如果是同一个对象调用的自然返回的是true,但是这里不是同一个对象,这里一个是String对象,一个是StringBuffer对象,所以继续往下走,然后检测是不是字符串类型的,也就是检测是不是String类型的,System.out.println(s.equals(buffer));这里传的是StringBuffer对象,所以返回的是false,第二个是System.out.println(builder.equals(buffer));                                这里是StringBuilder对象调用的equals方法,但是这个方法是Object类的equals方法,他俩也不说同一个对象调用的所以返回的是false。你去看看JDK中equals的源码就能理解了,可能我解释的也不是很清楚。求加分额

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
shi980088 发表于 2014-5-25 21:08
hello hello  hello false false   我给你解释一下吧,前三个hello不解释了行么,System.out.println(s.equ ...

你说的很对,我也看过源码了,如果要比较两个不同对象中的内容要用contentEquals()这个方法。
回复 使用道具 举报
hamiguadjs 发表于 2014-5-26 00:16
你说的很对,我也看过源码了,如果要比较两个不同对象中的内容要用contentEquals()这个方法。 ...

嗯,没事多看看源码有好处的加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马