你所调用的equals()方法实际上是Value的父类Object中的方法,只有在这两个句柄指向同一个对象时,才返回true。v1和v2指向两个对象,所以返回false。
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).
你可以重载equals()方法,这样就可以返回true了:
class Value {
  int i;
  boolean equals(Value v){
    if(v.i == this.i) return true;
    else return false;
  }
}

解决方案 »

  1.   

    输出为false因为Value没有重写Object的equals方法
    Object的equals是这样写的:
      return this == obj;
    就是判断引用是否相等,所以 v1和v2的引用当然不相等了,false
      

  2.   

    public class EqualsMethod {
      public static void main(String[] args) {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1.equals(n2));
      }
    } ///:~这个又输出什么呢?
      

  3.   

    我也想知道,有时候我都会混淆:equals和==的区别。
    谁可以说说他们两者之间的区别呢?
    ------------------
    ====================================
    没有风的日子,却是我毕业的时候??
    湛江风好大,毕业之后离开了湛江,
    怀念那----风*************************************
      

  4.   

    Java.lang包中的Object类有public boolean equals (Object obj)方法。它比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。
        ==运算符也进行等值比较。也就是说,对于任何引用值X和Y,当且仅当X和Y指向同一对象时, X==Y返回真。
        当两个分离的对象的内容和类型相配的话,String,Date,File类和所有其它override equals()的包装类(Integer,Double,等等)将返回真。你的类没有包装equals(),因此依然是两个引用是否指向同一对象
      

  5.   

    呵呵,我是java的初学者,觉得这方面比c++要复杂些,有谁可以解释清楚些吗?
    分有的就是:)
      

  6.   

    to   7(Nomad)但系这样比较也可以啊:if(String str == null),其实null是一个对象吗??如果用到==那么两边应该是什么类型呢??
    ------------------
    ====================================
    没有风的日子,却是我毕业的时候??
    湛江风好大,毕业之后离开了湛江,
    怀念那----风*************************************
      

  7.   

    String str = null;
    if(str == null)....这样也可以判断,null是对象吗?
    其实 == 两边应该是什么类型呢,equals比较是对象,那么 == 呢?是值还是对象,还是其他的呢?我知道字符串比较就一定要用equals不能用 == ,那么如果是两个整型应该用什么比较呢??
      

  8.   

    null是一个对象,一个java不承认的对象,呵呵........
      

  9.   

    不承认?什么意思呢?但它确实是存在于java中啊,而且我经常用呢。可以说具体一点吗,多谢
    ------------------
    ====================================
    没有风的日子,却是我毕业的时候??
    湛江风好大,毕业之后离开了湛江,
    怀念那----风*************************************
      

  10.   

    其实我们所用的是reference ,==用来比较两个reference是否指向同一个对象,null 就是没有指向任何对象(其实还是有的,一个特殊的,但无须更深了解)Java.lang包中的Object类有public boolean equals (Object obj)方法。它比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。
       
    但很多类对这个equals()做了重载.当两个分离的对象的内容和类型相配的话,String,Date,File类和所有其它override equals()的包装类(Integer,Double,等等)将返回真。
    这时,equals()就和==不一样了 try...
    class Value {
      int i;
    }public class EqualsMethod2 {
      public static void main(String[] args) {
        Value v1 = new Value();
        Value v2 = new Value();
        v1.i = v2.i=  100;
    Integer j1,j2;
    j1=new Integer(101);
    j2=new Integer(101);
        System.out.println(v1. equals(v2));
        System.out.println(j1. equals(j2));
    System.out.println(j1==j2);
      }

      

  11.   

    如果我没有重载equals,那么我想比较两个整型应该如何比较?boolean bl = true;
    if(bl == false)...这是什么比较呢??多谢7(Nomad)的解答!
    ------------------
    ====================================
    没有风的日子,却是我毕业的时候??
    湛江风好大,毕业之后离开了湛江,
    怀念那----风*************************************
      

  12.   

    Primitive type的==是内容比较(Primitive type没有reference),相对应的Wrapper type要用equals()实现内容比较
    如果我有说错之处,请指正,大家共同学习   : )
      

  13.   

    有点明白,其实还不算明白,呵呵,慢慢体会算啦。多谢7(Nomad)的解答
    ------------------
    ====================================
    没有风的日子,却是我毕业的时候??
    湛江风好大,毕业之后离开了湛江,
    怀念那----风*************************************