System.out.println(v1.equals(v2));
比较的是两个实例的地址,所以是false

解决方案 »

  1.   

    System.out.println(n1.equals(n2));
    比较的难道不是两个实例的地址?我知道你肯定要说是在比较对象,
    但怎样区别这种情况呢?
      

  2.   

    对于比较两个对象,用equals是不错,但是你应该overwrite Object类的equals方法才对。也就是你要定个比较的标准了。Interger是一个已经实现了equals的。
    你的这个测试用例写的很错屁呀。建议看看think in java
      

  3.   

    楼上一言中的!
    很正确,当一个类没有重载Object类地equals()方法时,如果在该类中调用equals()方法,那么系统就会只用Object地equals()方法,也就是从地址上比较两个对象是否相同.而Integer类已经重载了Object地equals()方法,所以在重载地方法中,是对Integer包含地值进行比较,所以返回true
      

  4.   

    不好意思 这个例子正是 think in java 的第3章的例子
      

  5.   

    v1,v2肯定是不同的!因为是不同的对象!
    而n1,n2却都是常量,故而其结果是相等的!!!!
      

  6.   

    我有些明白了,是不是自己Value类没有自己的equals()方法,如果做一个value.equals()方法就可以了?
      

  7.   

    对于一些常态变量:
    例如String,int,long,double
    java提供了类来构造它们
    同时也重载了Object类的equals方法
    就是说它们判断两个类是否相等是跟其他类的方法不同的
    只要值相等就会判定未true
    例如    
        String  s1 = new String("1230");
        String  s2 = new String("1230");
        s1 equals s2返回为true因为他们的值豆为"1230"而普通类的equals判断,只有两个reference指向同一个实例时
    才会判定为true
    例如: Value v1 = new Value();
    Value v2 = new Value();
       v1 equals v2返回为false
       因为他们指向不是同一个实例
      

  8.   

    初学水平低不懂当然要问 没什么好不好意思的帖子也要结 楼上的心态不太好!程序改为package c03;class Value 
    {
    int i;
    public Value(int j)
    {
    i=j;
    } public int x()
    {
    return i;
    } public boolean equals(Value v)
    {
    return (i==v.i);
    }
    }public class EqualsMethod 
    {
        public static void main(String[] args) 
        {
    Value v1=new Value(47);
    Value v2=new Value(47); Integer n1 = new Integer(47);
    Integer n2 = new Integer(47);
    System.out.println(v1.equals(v2));
    System.out.println(n1.equals(n2));
        }
    }