class Value{
    int i;
}
public class Equals {
    public static void main(String[] args){
        Value v1=new Value();
        Value v2=new Value();
        v1.i=v1.i=100;
        System.out.println(v1.equals(v2)); //结果是false
        System.out.println(v1==v2);  ////结果是false    }
}
两个比较的结果都是false。为啥第一个(equals)也是false,谁解释下??

解决方案 »

  1.   

    v1.i=v1.i=100; 
    这一行没看懂
    equals和==的区别,你这么记就没错了:
    首先数据类型有基本类型和引用类型。
    1.当比较的是基本类型数据的时候:equals和==都是拿值比较。
    2.当比较的是引用类型数据的时候:==比较的是引用,也就是地址,也有人称句柄,你自己喜欢怎么叫就怎么叫吧;equals比较的是值。
      

  2.   

        老兄你太大意了,v1,v2本来就不是同一个对象怎么可能相等呢?  你这v1.i=v1.i=100; 显然就是一句废话
    这样就对了
    class Value{ 
        int i; 

    public class Equals { 
        public static void main(String[] args){ 
            Value v1=new Value(); 
            Value v2=new Value(); 
          //  v1.i=v1.i=100; 
          v1=v2;
            System.out.println(v1.equals(v2)); //结果是ture 
            System.out.println(v1==v2);  ////结果是TRUE    } 

    但是我还是不知道你到底想问什么。。?希望我的回答对你有点帮组!
    给你看个我为你写的例子嘛:理解一下
    class Value{ 
        int i; 

    public class Equals { 
        public static void main(String[] args){ 
    String s=new String("abc");
    String b=new String("abc");
    System.out.println(s==b);
    System.out.println(s.equals(b));
    String c="abc";
    String d="abc";
    System.out.println(c==d);
    System.out.println(c.equals(d));
        } 

    结果:
    false
    true
    true
    true
      这里面涉及到java的共享机制!具体细节,自己慢慢去看书。
      

  3.   

    Lz的代码是编程思想上面的,上面说了很清楚了呀,
    equals()默认的情况下比较的都是引用除非你在自己定义的类中覆盖掉equals方法。
      

  4.   


      对象和引用大不相同哈,
      比如: 
    Button bb=new Button("asa"); 
    这里的bb指得就是引用,说白了,就是个名字,用这个名字去操纵内存里面的对象块。 new Button()用来创建一个按钮对象并返回该对象的引用,也就是对引用bb的实例化(给其分配内存).其实,引用是放在堆栈里面,而对象则在堆上面创建,在用new创建对象的时候,不但给对象在堆上分配了内存空间,而且也在地址首部创建了一个名字。你暂且把“=”看作赋值,则上面的例子就是把对堆上创建的名字赋给bb.然后用bb去操纵这块内存。再慢慢体会一下。 
    引用是遥控器,对象是电视机   通俗的说法。把这句话记者就可以了! 
      

  5.   

    equals 默认比较的是和 == 相同的。
    而你的Value并没有重写equals, 而是使用系统默认的。 所以就可==相同了。class Value{
        int i;
      public boolean equals(Object obj){
        // 这里面你的自己写上代码才行,我就不替你写了
      }
      

  6.   

    equals是函数,==是操作符
    将比较运算封装成函数,能得到你想要的那种“等于”
    如果结果还不是你想要的,你可以修改equals函数过程,把结果变成你想要的
      

  7.   

    老掉YA~
    equals是比较内容,而==表示比较对象(包括内存地址等)
    不过有些笔试题喜欢考这个……
      

  8.   

    好像equals比较的是什么应该看该类具体的equals方法实现吧,不仅是值吧
      

  9.   

    楼上的在理,equals方法是看具体实现的吧.
      

  10.   

    Value类加个方法:
    public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            final Value other = (Value) obj;
            if (this.i != other.i) {
                return false;
            }
            return true;
        }
      

  11.   

    从object类的角度看,==和equals()是一样的,只是大部分类 如:String类  重写了equals方法。
    所以你也要重写equals()方法才行
      

  12.   


    v1.i=v1.i=100;  这一步,只是给v1对象中的i属性付了值,v2中的i属性依旧是个空啊!!
    所以后面你不管怎么比较都不会等啊!
    如果改成:
             v1.i=v2.i=100; 
            System.out.println(v1.equals(v2)); //结果是true
            System.out.println(v1==v2);  ////结果是false 
      

  13.   

    v1.i=v1.i=100;这一句:我不懂,,,,,,,,汗死,
      

  14.   

    你没有重载这个方法(equals),它比较的是按内存地址,当然就是false了
      

  15.   

       18楼的兄台,楼主可能是写错啦,他本来可能也是想写成你那样,
    不过即使写成那样,答案也是错的...呵呵呵
    应该还是要重写equals方法吧!!!
      

  16.   

    equals()默认的情况下比较的都是引用除非你在自己定义的类中覆盖掉equals方法。
      

  17.   

    Value中需要覆写Object类中的equals方法==比较的是Stack区中引用指向的地址
    equals比较的是值是否相等  那么你的equals显示false的原因是没覆写equals方法!
      

  18.   

    楼主看看我这篇,包你弄清楚:
    http://blog.csdn.net/YidingHe/archive/2009/05/02/4143651.aspx
      

  19.   

    看 YidingHe 这里: 
    http://blog.csdn.net/YidingHe/archive/2009/05/02/4143651.aspx Java: equals 和 ==收藏
    谈论 equals() 和 hashCode() 的文章太多了,而关于 equals() 和 == 之间的区别,能找到的文章很少。但是搞清楚这点非常重要。如果没搞清楚的话,很容易写出 BUG 而不自知。
    二者的区别在于:equals() 方法用于比较两个对象,比较它们的值是否相等; 
    == 运算符用于比较两个变量,比较它们是否引用到同一个对象。 
    我们在写 Java 代码的时候,看到的都是变量,而不是对象。对象是我们无法直接访问的,我们只能通过变量来操作对象。变量的值就是对象的引用,所以换句话说:equals() 用来比较两个对象的值,== 用来比较两个变量的值。
    (例外情况:当变量被定义为基本型别时,它不会指向对象,它的值就是基本型别的值。这种情况本文不讨论。)
    栽在这上面的初学者太多了。
    典型的例子就是 String。为什么 String 不能用 == ?因为 String 是对象,只有当 String a 和 String b 指向同一个对象的时候,a == b 才会是 true;否则的话,即使两个 String 对象的值相同,a == b 也会是 false。
    而且要注意,当 String a = "a";String b = "a"; 的时候,a 和 b 两个变量指向的就是同一个 String 对象 "a"。这是 Java 为了节省内存做的优化,但却让很多人误以为 String 对象可以用 == 来比较。其实这是错的。
    所以,原则上,对象之间的比较都要用 equals() 方法,但有时候我们也可以用 == 来比较对象。例如枚举类,它只允许有那么几个对象,所以可以用 == 来比较。或者我们确实想要知道两个变量是不是指向同一个对象,这时候也应该用 ==。