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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路国强 中级黑马   /  2013-12-17 16:04  /  1445 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String a = "a";
String b = new String("a");a.equals(b);
为啥结果是true,equals方法不就是比较的内存地址啊。小弟迷惑。求解

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 equals比较的是内容。==才是比较内存。.

查看全部评分

10 个回复

倒序浏览
String 类中已经将Object中的equals方法覆写,这时比较的不是地址值了,而是字符串的值

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
因为string 类 重写了equals 方法啦!!所以比较的是内容  如果不重写的话 比较的就是对象的引用~  

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
equals本来比较的就是字符串的值,不是内存地址,是你概念混淆了

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
零敢 发表于 2013-12-17 16:41
equals本来比较的就是字符串的值,不是内存地址,是你概念混淆了

是因为String类中重写了equals()方法,比较的是字符串的值。如果是int类型的,比较的还是地址。
回复 使用道具 举报
首先,如果变量是int类型将无法调用equals方法,需要变成引用数据类型Integer,然后在调用equals方法,这样一来比较的是数值!此外,==也是比较的两个变量 的数值!

public class ChangLiang {
        public static void main(String[] args){
                Integer a = 4;
                Integer b = 4;
                System.out.println(a.equals(b));  //结果为:true。
                System.out.println(a==b);  //结果也为:true。
        }

}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
学习了!!
回复 使用道具 举报
李然 中级黑马 2013-12-17 22:29:19
8#
原因就是String这个类中重写了object类中的equals方法,比较的原则变成了只比较字符串的内容。如果内容一样那么就返回true了,并不是比较地址了。这样说就比较清楚了。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
equals是判断内容啊,equals()是比较的内容,==比较的才是内存地址。。。{:soso_e121:}我也是最近看书才理解的。栈呀堆呀的搞的我都头大了。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。
比如:
String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");
那么:
s1==s2 是 false      //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,

故不相等。
s1.equals(s2) 是 true     //两个变量的所包含的内容是abc,故相等。
注意(1):
如果:          StringBuffer s1 = new StringBuffer("a");
                      StringBuffer s2 = new StringBuffer("a");
                  
结果:           s1.equals(s2) //是false
解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
           
          而Object类中的equals方法是用来比较“地址”的,所以等于false.
注意(2):
对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符
串常量所生成的变量,其中所存放的内存地址是相等的,
所以s3==s4是true(即使没有s3=s4这样一个赋值语句)

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
belief丶Only 发表于 2013-12-17 22:48
对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本 ...

嗯嗯,明白了,都有哪些的类重写了equals()方法???不知道我这样问的对不对
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马