class Test1{
int i;
}
public class Test2{
public static void main(String[] args){
Test1 t1 = new Test1();
Test1 t2 = new Test1();
t1.i = t2.i = 100;
System.out.println(t1.equals(t2));
}
}为什么这个结果是false啊?equals不是直接比较2个值吗?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【llm0528】截止到2008-07-09 15:33:15的历史汇总数据(不包括此帖):
    发帖的总数量:45                       发帖的总分数:900                      每贴平均分数:20                       
    回帖的总数量:38                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:45                       结贴的总分数:900                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    你没有实现Test的equals方法,默认是比较内存地址的,当然不等了!
      

  3.   

    class Test1{
        int i;
     public boolean equals(Object obj){
      if(obj instanceof Test1){
        return i==((Test1)obj).i;
      }
      return false;
     }}
      

  4.   

    你这个类没有重写Object类的equals()方法所以你用.equals() 就直接调用了  Object类的.equals()方法(代码在楼上贴着)
      

  5.   

    恩,equals方法好像是比较对象的,同一类的对象才会返回true,看老紫竹的就行了···嘿嘿····
      

  6.   

    楼上说的不对如果没重写equals()方法的对象  调用equals()  其实就是做==操作像String 之间的比较,比较的是内容,因为String 这个类重写了equals()方法
      

  7.   


    equals 和 =
    equals 和 ==
    都是不一样的.! 老紫竹解释了!!
    愿楼主好运吧.!!
      

  8.   

    你的类 Test1 打超类 Object 继承下来的 equals 方法的源代码如下: public boolean equals(Object obj) {
    return (this == obj);
    }它只比较引用是否相等,和 t1 == t2 没什么区别。你可以自己覆盖 equals 方法,来实现真正的相等性测试,如下:public class EqTest { private int i; public boolean equals(Object obj) {  //覆盖了超类继承下来的 equals 方法来实现自己真正的相等性测试
    if (obj == this) return true;  //如果引用都相等那这两个就是同一个对象,当然自己与自己相等
    if (obj == null) return false;  //如果传进来空引用,那就不必比较了,真实的对象肯定同虚无不相等
    if (obj.getClass() != this.getClass()) return false;  //如果两个对象不是同类就根本没有可比性,当然不等
    EqTest other = (EqTest) obj;  //将 obj 强制转换为它实际的类型
    return other.i == this.i;  //根据两个属于同一个类的不同对象的实例域的值来判断这两个对象是否相等
    } public static void main(String[] args) {
    EqTest t1 = new EqTest();
    EqTest t2 = new EqTest();
            t1.i = t2.i = 100;
            System.out.println(t1.equals(t2));
    }}
      

  9.   

    我之所以想不通就是,以前做string类型的比较时,就可以用 equals 来比较其中的值,而不是引用,正纳闷为什么到了数字 int 比较的时候居然变成了 false 感谢各位的回答啊,尤其 2 和 8楼,都以代码直观的方式来帮我解答。