黑马程序员技术交流社区

标题: 关于== 与equals 越看越迷糊呢 [打印本页]

作者: 蒋映辉    时间: 2012-5-5 11:10
标题: 关于== 与equals 越看越迷糊呢
                                String a="asd";
                System.out.println(a.equals("asd"));
                System.out.println(a=="asd");
                String b=new String("asd");
                System.out.println(b.equals("asd"));
                System.out.println(b=="asd");
                String c=“asd”;
                System.out.println(b.equals(c));
                System.out.println(b==c);
    运行结果是
true
true
true
false
true
false
  在书上对于==的解释:如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同)只要两个变量的值相等,就将返回true  那为什么b=="asd"返回的是false呢?
而按道理 a应该是保存在常量池中,b应该堆内存中,他们怎么又相等呢?

               
作者: 王敏NO.09    时间: 2012-5-5 11:30
asd也是一个对象,两者指向同一个引用
作者: 崔仁军    时间: 2012-5-5 11:30
第二次回答这个问题了   其实很简单的   
1 相等性的比较 (== )
   a  对于原生数据类型来说,比较的是左右两边的值是否相等。
  b  对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。
2  equals()方法,该方法定义在Object 类当中,因此Java  中的每个类都具有该方法,对于Object 类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于 Object 类的equals()方法来说,它等价于==。
3  对于 String  类的 equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。 对于String 对象的相等性判断来说,请使用equals()方法,而不要使用== 。
作者: 马浩    时间: 2012-5-5 11:31
                String a="asd";//直接到String池中去找字符“asd”
                System.out.println(a.equals("asd"));//内容相同,true
                System.out.println(a=="asd");//内容、地址都相同,true
                String b=new String("asd");//new了一个对象,在堆中开辟空间,有了新的地址
                System.out.println(b.equals("asd"));//内容相同,true
                System.out.println(b=="asd");//地址不同,false
                String c=“asd”;//直接到String池中去找字符“asd”
                System.out.println(b.equals(c));//内容相同,true
                System.out.println(b==c);//地址不同,false

作者: 马浩    时间: 2012-5-5 11:43
马浩 发表于 2012-5-5 11:31
String a="asd";//直接到String池中去找字符“asd”
                System.out.println( ...

你弄反了吧,==是要地址内容都相同的
作者: 胡奎    时间: 2012-5-5 11:55
==比较的地址,equals比较内容
作者: 贠(yun)靖    时间: 2012-5-5 12:22
胡奎 发表于 2012-5-5 11:55
==比较的地址,equals比较内容

这样说就不对了 哥们   前提是要看是否重写没重写equals方法   String类重写了Object的equals方法 才比较的是内容的    如果没有重写的话呢?
作者: 胡奎    时间: 2012-5-5 12:29
贠(yun)靖 发表于 2012-5-5 12:22
这样说就不对了 哥们   前提是要看是否重写没重写equals方法   String类重写了Object的equals方法 才比较 ...

恩,说的是,我错了
作者: 安路凤    时间: 2012-5-5 12:29
受益匪浅!!以前真是没注意这个问题呢




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