划词......
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

全新java初学者实践附加教程1----"=="和equals()

Posted on 2007-08-09 19:52  王君  阅读(558)  评论(1编辑  收藏  举报

    这是附加教程的第一节,我们来介绍一下 ==和equals()的区别,==是相等,equals()也是相等。这两个词的区别是什么呢?这是找工作时很多面试官的问题。我们来解答一下。首先我们看这么个例子。实践:

    public class TestEquals {

   public static void main(String[] args) {

    MyDate date1 = new MyDate(14, 3, 1976);

    MyDate date2 = new MyDate(14, 3, 1976);

 

    if ( date1 = = date2 ) {

      System.out.println("date1 is identical to date2");

    } else {

      System.out.println("date1 is not identical to date2");

    }

 

    if ( date1.equals(date2) ) {

      System.out.println("date1 is equal to date2");

    } else {

      System.out.println("date1 is not equal to date2");

    }

 

    System.out.println(" date2 = date1;");

    date2 = date1;

 

    if ( date1 == date2 ) {

      System.out.println("date1 is identical to date2");

    } else {

      System.out.println("date1 is not identical to date2");

    }}}

这个例子中的MyDate类代码如下

public class MyDate {

 private int day;

 private int month;

 private int year;

 

 public MyDate(int day, int month, int year) {

    this.day   = day;

    this.month = month;

    this.year = year;

 }

 public boolean equals(Object o) {

   boolean result = false;

    if ( (o != null) && (o instanceof MyDate) ) {

      MyDate d = (MyDate) o;

      if ( (day == d.day) && (month == d.month)

          && (year == d.year) ) {

        result = true;

      }}

    return result;

 }

 public int hashCode() {

    return (day ^ month ^ year);

 }} 上述例子下载

将这两个类放置到同一个文件夹中,只需要编译TestEquals类,就可以将MyDate一同编译了。然后执行java TestEquals查看结果。如图28-1所示

28-1

也就是说date1 = = date2 虽然都是new MyDate(14, 3, 1976);但是new了两次就是两个对象了,不能==了。==是指引用是否相同。

    那么用equals()呢,equals()Object里的方法,任何对象都继承Object。所以equals()方法也适用于所有的类。为什么这回date1date2equals了呢?equals()是指值是否相等。因为都是(1431976)所以相等。

    我们把date1赋值给date2,结果当然是==了,都已经把引用赋给它了。还能不==吗?