黑马程序员技术交流社区

标题: equals()方法的小疑惑求助 [打印本页]

作者: 路国强    时间: 2013-12-17 16:04
标题: equals()方法的小疑惑求助
String a = "a";
String b = new String("a");a.equals(b);
为啥结果是true,equals方法不就是比较的内存地址啊。小弟迷惑。求解

作者: 末末    时间: 2013-12-17 16:18
String 类中已经将Object中的equals方法覆写,这时比较的不是地址值了,而是字符串的值
作者: Faner    时间: 2013-12-17 16:22
因为string 类 重写了equals 方法啦!!所以比较的是内容  如果不重写的话 比较的就是对象的引用~  
作者: 零敢    时间: 2013-12-17 16:41
equals本来比较的就是字符串的值,不是内存地址,是你概念混淆了
作者: 路国强    时间: 2013-12-17 16:42
零敢 发表于 2013-12-17 16:41
equals本来比较的就是字符串的值,不是内存地址,是你概念混淆了

是因为String类中重写了equals()方法,比较的是字符串的值。如果是int类型的,比较的还是地址。
作者: 迪兰奇迹    时间: 2013-12-17 17:16
首先,如果变量是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。
        }

}
作者: belief丶Only    时间: 2013-12-17 17:35
学习了!!
作者: 李然    时间: 2013-12-17 22:29
原因就是String这个类中重写了object类中的equals方法,比较的原则变成了只比较字符串的内容。如果内容一样那么就返回true了,并不是比较地址了。这样说就比较清楚了。
作者: 闭眼就天黑    时间: 2013-12-17 22:38
equals是判断内容啊,equals()是比较的内容,==比较的才是内存地址。。。{:soso_e121:}我也是最近看书才理解的。栈呀堆呀的搞的我都头大了。

作者: belief丶Only    时间: 2013-12-17 22:48
对于字符串变量来说,使用“==”和“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这样一个赋值语句)
作者: 路国强    时间: 2013-12-18 10:57
belief丶Only 发表于 2013-12-17 22:48
对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本 ...

嗯嗯,明白了,都有哪些的类重写了equals()方法???不知道我这样问的对不对




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2