黑马程序员技术交流社区

标题: equals和==的用法? [打印本页]

作者: 李亚西    时间: 2014-8-14 20:51
标题: equals和==的用法?
大家能具体说下equals和==的用法吗?越具体越好
作者: 柠萌不    时间: 2014-8-14 21:02
个人理解,==比较的是地址值,equals其实差不多,但是在一些类中重写了方法,所以可以比较内容:loveliness:
作者: 象牙    时间: 2014-8-14 23:01
恩 等着看看各位路人的答案
作者: ximi    时间: 2014-8-14 23:40
本帖最后由 ximi 于 2014-8-14 23:47 编辑
  1. int number1 = 1;
  2.                 int number2 = 1;
  3.                
  4.                 /*
  5.                  * true
  6.                  * int为基本类型,所以对比的值即1==1,结果为true
  7.                  */
  8.                 System.out.println(number1 == number2);
  9.                
  10.                 String a = new String("a");
  11.                
  12.                 String b = new String("a");
  13.                
  14.                 String c = new String("c");
  15.                 //输出a/b/c的哈希码值
  16.                 System.out.println(a.hashCode());//97
  17.                 System.out.println(b.hashCode());//97
  18.                 System.out.println(c.hashCode());//99
  19.                 /*
  20.                  * true
  21.                  * a和b都是对象,所以比较哈希码值,结果97==97为true
  22.                  */
  23.                 System.out.println(a.equals(b));
  24.                 /*
  25.                  * false
  26.                  * 这里比较的内存地址
  27.                  */
  28.                 System.out.println(a == b);
  29.                 /*
  30.                  * false
  31.                  * a和b都是对象,所以比较哈希码值,结果97==99为false
  32.                  */
  33.                 System.out.println(a.equals(c));
  34.                 /*
  35.                  * false
  36.                  * 这里比较的内存地址
  37.                  */
  38.                 System.out.println(a == c);
  39.                
  40.                 /*
  41.                  * equals 和 == 参见下面信息
  42.                  * http://wenku.baidu.com/link?url=_5wAJQarxUdHotDoyWRbXrMoE7KqaMgwee8qz-ykUne90ZhksHwxoprUpFApGGSRRMrlnlq2IB-WH6Hm3A0LabTV7CDGCT0K4CUM8uFhXPK
  43.                  *
  44.                  * hashCode:参见下面信息
  45.                  * http://www.iteye.com/topic/257191
  46.                  * http://blog.csdn.net/fenglibing/article/details/8905007
  47.                  */
复制代码


作者: 李亚西    时间: 2014-8-15 06:46
柠萌不 发表于 2014-8-14 21:02
个人理解,==比较的是地址值,equals其实差不多,但是在一些类中重写了方法,所以可以比较内容 ...

好的,谢谢你的回答
作者: 依然超级赛亚人    时间: 2014-8-15 07:08
==和equals()的区别?
                        A:==
                                基本类型:比较的是基本类型的值是否相同
                                引用类型:比较的是对象的地址值是否相同
                        B:equals()
                                默认情况下,比较对象的地址值。
                                如果重写了该方法,那么,什么作用请看自己的代码(一般情况下,最常用的是改写它用于比较内容是否相同)。
作者: 李亚西    时间: 2014-8-15 08:07
依然超级赛亚人 发表于 2014-8-15 07:08
==和equals()的区别?
                        A:==
                                基本类型:比较的是基本类型的值是否相同

嗯,这个不错
作者: 大成哥    时间: 2014-8-15 09:07
两个意思差不多吧 主要还是看用的环境
作者: 李大壮    时间: 2014-8-15 09:10
柠萌不 发表于 2014-8-14 21:02
个人理解,==比较的是地址值,equals其实差不多,但是在一些类中重写了方法,所以可以比较内容 ...

是的,equals如果不复写,用的是Object的方法,还是用了==
作者: Anyway    时间: 2014-8-15 09:30
当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,则只有两个变量的值相等,就将返回true
作者: Anyway    时间: 2014-8-15 09:36
但对于两个引用类型变量,他们必须指向同一个对象时,==判断才会返回true、==不可用于比较类型上没有父子关系的两个对象。equals方法是object提供的一个实例方法,所有引用变量都可调用该方法来判断是否与其他引用变量相等




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