当前位置: 代码迷 >> Java相关 >> 有点问题
  详细解决方案

有点问题

热度:110   发布时间:2009-10-16 16:25:23.0
有点问题
import java.lang.* ;

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 MyDate(MyDate date) {
    this.day   = date.day;
    this.month = date.month;
    this.year  = date.year;
  }
}

class TestMyDate
{
    public static void main(String[] args)
    {
        MyDate day1=new MyDate(20,3,2009);
        MyDate day2=new MyDate(20,3,2009);
                System.out.println(day1.equals(day2));
                System.out.println(day1.hashCode());


        
    }
}

问题:day1.equals(day2)的返回值为什么是false?
搜索更多相关的解决方案: void  private  public  import  

----------------解决方案--------------------------------------------------------
对于Object对象,它提供了一个最最严密的实现,那就是只有是同一对象是,equals方法才返回
true,也就是人们常说的引用比较而不是值比较.你new了两次,明显不是一个对象,你的,明白!!!
----------------解决方案--------------------------------------------------------
zhi

----------------解决方案--------------------------------------------------------
回复 2楼 流星雨
恩,可以也把day2.hashCode()打印出来与day1.hashCode()对比一下
我都明白了,估计他也会明白的,是吧,姐?
嘿嘿

[ 本帖最后由 多多关照 于 2009-10-16 19:19 编辑 ]
----------------解决方案--------------------------------------------------------
equals()方法应该比较的是两个对象的属性吧??
== 才是要求2个对象都指向同一个空间才对啊;

这个好像是equals(0和 == 的区别吧

----------------解决方案--------------------------------------------------------
public class AA {

     
    public static void main(String[] args) {
        String a = new String("zhangqi");    //*
        String b = new String("zhangqi");
        System.out.println(a.equals(b));
    }

}
或者把*换成 String a = “zhangqi";  

返回结果都是true!  
----------------解决方案--------------------------------------------------------
补充
public class AA {

     
    public static void main(String[] args) {
        String a = new String("zhangqi");
        String b = new String("zhangqi");
        System.out.println(a==b);
    }

}
  

结果是false
----------------解决方案--------------------------------------------------------
import java.lang.* ;

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 MyDate(MyDate date) {
    this.day   = date.day;
    this.month = date.month;
    this.year  = date.year;
  }
}

class TestMyDate
{
    public static void main(String[] args)
    {
        MyDate day1=new MyDate(20,3,2009);
        MyDate day2;
        day2=day1;
        //MyDate day2=new MyDate(20,3,2009);
                System.out.println(day1.equals(day2));
                System.out.println(day1.hashCode());


        
    }
}
改一下就能出来true了

----------------解决方案--------------------------------------------------------
day1和day2是两个对象,当用new创建后,指向不同的内存地址,所以用equals判断他们的地址时,肯定是false了。
----------------解决方案--------------------------------------------------------
  相关解决方案