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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

钱途mo路

初级黑马

  • 黑马币:37

  • 帖子:24

  • 精华:0

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);// false
System.out.println(s1.equals(s2));// true
不是说,==比较基本类型时比较的是内容,比较的是引用类型时比较的是地址值,而equals()比较的是引用类型,比较的是地址值,可为啥s1==s2的结果却是false?求高手指教!

5 个回复

倒序浏览
本帖最后由 fantacyleo 于 2014-7-8 22:31 编辑

equals()方法在根类Object中确实是比较地址值,也就是看两个引用变量是否指向同一个对象。API文档原话: this method returns true if and only if x and y refer to the same object (x == y has the value true)

但是,子类继承父类时可以重写父类的方法啊。String类作为Object的子类就重写了继承自Object的equals()方法,把相等判定条件改成两个字符串有相同的字符序列。API文档:The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object. 所以s1.equals(s2)返回true

而s1和s2本身是两个不同的对象(虽然它们保存了同样的字符序列),s1==s2当然返回false啦。

回复 使用道具 举报
楼上  正解啊   受教了
回复 使用道具 举报
进来学习一下
回复 使用道具 举报
s1和s2 是分别new的一个新的字符串,相当于在内存中开辟了两个空间,地址值当然不一样了,所以s1==s2的结果为false.
而equasl()方法是将父类Object的方法进行了重写,equals()方法用于比较两个字符串中的字符是否相等,所以s1.equals(s2)结果为true.
回复 使用道具 举报
楼上正解,语言也简单易懂:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马