刚才看了一些在论坛里的文章,看到这个:equals()方法在缺省条件下的含义同==一样,但是你可以对不同的类重载equals()方法类实现自己的相等定义,比如String类就重载了equals()类比较两个字符串的内容。
那是不是这里的Value类里也是没有重载equals() 
的缘故,所以就和 == 一样了呢?

解决方案 »

  1.   

    Value v1=new Value();
    Value v2=new Value();
    v1.i=v2.i=100;
    V1,V2的地址一樣嗎?
    Value();又沒有對equals做重載
      

  2.   

    class Value
    {
       int i; 
    } public class EqualsMethods
    {   public static void main(String[] args)
        {
          
    Value v1=new Value();
    Value v2=new Value();v1.i = v2.i = 100;
    System.out.println(v1.i);
    System.out.println(v2.i);System.out.println(v1);
    System.out.println(v2);System.out.println(v1.equals(v2));
        }
    }
    这样你就清楚了,v1.equals(v2)的时间,比较的是v1和v2的值,作为用户自定义类型(类)的话,比较的是对象声明构建以后所在的地址。
      

  3.   

    大家说的都对,关键是V1和V2的内容是什么?并不是i.
    所以返回的是false
      

  4.   

    The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true). JDK的help上写得很明白.
      

  5.   

    呵呵,这个基本问题有必要说清楚:
    == 对于原始类型比较的是值,对于引用类型比较的是句柄(其实句柄也是值)
    equal 是java.lang.Object的方法,源码:
        public boolean equals(Object obj) {
    return (this == obj);
        }
    也就是说,如果我们的类没有覆盖equals方法,那么效果跟==一样
              如果我们的类覆盖了equals方法,那么效果就是你自己定义的了,像String类,覆盖了equals方法,判断并返回两者的内容是否一致。搂主的举的例子肯定是false,如果返回了true,那么可以向你的jre的厂商举报bug了
      

  6.   

    equals()方法必须重载才有用,对于java本身的程序库来说每个类几乎都可以使用equals()方法,因为在那些类里面已经将他重载,在上面你自己定义的类中,你没有重载equals()方法,所以他不能执行你期望的比较!
      

  7.   

    谢谢各位的答复,有些懂了,
    equals()比较的是地址,
    自己定义的类要用这个方法时要重载,否则就是和  ==  的用法一样了!