在java中“equals”和“==”的区别

equals 方法是 java.lang.Object 类的方法。

  可以从三个方面来说明它们的区别:

   1.对于基本类型变量来说。例如int、char,它们使用“equals”和“==”的作用是相同的。

     例:

         int i=5;  int a=5;

         那么i==a的结果是true,  i.equals(a)的结果也是true。

   2.对于字符串变量来说

    字符串并不是基本数据类型,而是一个引用数据类型。对于引用数据类型来说,"=="比较的是两个对象在内存中的地址,"equals"比较的是两个对象的内容。例:

      String a="abd";

      String b="abd";

      String c=new String("abd");

   (1)a==b的结果是true;a.equals(b)的结果是true。前者说明a与b的引用对象是相同,后者说明两者的内容相同。

   (2)a==c的结果是false;a.equals(c)的结果是true。那就是说a与b引用对象不同,内容相同。

   那么为什么会出现这种情况呢?

   原来在程序运行的时候,它会创建一个字符串缓冲池用以存放字符串变量。当你声明一个字符串变量时,程序会首先检查缓冲池中是否已有相同值的对象。如有,则直接返回这个对象的地址;若没有,则创建一个对象并将其放入缓冲池,然后再返回地址。而(2)之所以与(1)不同,是因为创建时使用了new操作符;明确的表明了想要新创建一个对象。因此a与c的内容虽相同,但对象却不同。

   3.从一个自定义类的方面来说

    任何类都直接或间接地是Object的子类,而Object中的equals方法却是通过“==”来实现的,即只能够比较两者的对象是否相同。

   例:

        class Examply{

          Examply obj1=new Examply();

          Examply obj2=new Examply();

        }

     此时obj1.equals(obj2)的实质就是obj1==obj2,结果都是false。

    在2中,之所以可以使用equals来比较两者的内容,是因为在java的类库中,String类自己重写了equals方法,因此可以比较内容。像            StringBuffer类就没有重写自己的equals方法,因此他在使用时也是调用Object的equals方法,只能比较对象。在2的举例中,如改写为:   

      StringBuffer a=new StringBuffer("abd");

      StringBuffer b=new StringBuffer("abd");

这时a.equals(b)的值为false。

     因此,很多时候都需要自己去重写equals方法。

这是一个重写的实例:
  public boolean equals(Object obj)
  {
if (this == obj) return true;
if (obj == null) return false;
if (!(obj instanceof Student)) return false;

Student s = (Student)obj;
return number.equals(s.number);
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值