a = b;
a 和 b这两个reference指向了同一对象,所以返回true c.i = d.i = 100;
 System.out.println(c.equals(d));
这两个对象的i值相同,但还是两个对象
要返回true你要自己重写它们的equals方法

解决方案 »

  1.   

    to  zhxx(做个好流氓有多难):
     谢谢你的回复,我认为我们两人对==的理解是不同的,从你的回复中,我认为你对==的理解是如果两个reference指的是同一对象,即返回为true,反之为false;
     我又仔细把 think in java中关于==中的阅读了一遍,它的原话是这样的:
      "因为两个对象的内容是不同的,不过虽然内容相同,但其reference却不同,由于==和!=运算符所比较的是object reference,所以....."
     我从这里的理解就是==是比较两个对象的reference。但是搜索以前的帖子观点和你类同。
     
     是不是一个reference就只对应一个对象,一个对象在就只能由一个reference与其对应。是这样么?
      

  2.   

    String a = "abc";
    String b = "abc";a == b  //输出为trueString a = new String("abc");
    String b = new String("abc");
    a == b //输出为false;这两个有什么区别呢?
      

  3.   

    equal比较值,“=”比较地址。
    "a".equal("a")为true
    "a"=="a"为false,不过jbulider中把“=”认为是equal(),所以你若
    if("a"=="a"){
    //code
    }
    你用debug跟踪到"a"=="a",再按F6显示"a"=="a"为false,但在jbuilder中还是会执行到if里面
      

  4.   

    ==用于比较两边的值是否相等,如果在==两边的是对象的话,比较的是它们的地址。
    而equals比较的是两个对象的内容是否相同,当然如果是你设计的类的equals方法,则需要你自已实现。
      

  5.   

    "=="是java中固定的操作符,用来判断是否相等,用法比较单一
    由于在java中除了基础类型(int,char,boolean等)其它都是对象,而用"=="来比较对象实际上就是在比较对象的句柄(也可以说是地址的比较),因此即使对象的内容是一样的用"=="判断也是不一样的
    (除非:Object a =new Object()
           Ojbect b = a;
           if(a==b)
              System.out.println("true");
     在上述这个程序的情况下执行结果是打印出“true”)。
    而equals()方法在Java中所有的对象都具有的,由于Java中的所有类都extends Object,所以个各类都可能对equals()方法重写(面向对象多态性的体现),因此equals()方法虽说也是比较两个对象,但由于各个类中的实现方法不一样,从而其比较的内容也不一样,就像楼上说的String 对象的equals()是用来比较字符串对象所包含的字符串值是否相等。
    结论:==的用法比较单一,是一个固有的操作符
        equals()方法是一个可以根据需要来比较两个对象的某些特征是否相等,用途很广
    equals()就是对象值比较,而==是比较两个对象是否为同一个即指向同一个内容!
    然而值一样并不意味着对象是同一个对吧!
    对于楼上举的例子:
    String a=new String("aa");
    String b=new String("aa");
    是两个对象,‘==’的非
    而equals的true
    是因为a和b值一样,‘而对象不一样!
    而另个例子:
    Object a =new Object()
          Ojbect b = a;
          if(a==b)
             System.out.println("true");
    这是因为在java中对象都是引用型变量,即对象变量实质是地址指针,他俩附值后指向同一个对象内存,所以是相等的!public class Test
    {
    public static void main(String[] args){
    String[] flav1 = {
                  "Chocolate", "Strawberry",
                  "Vanilla Fudge Swirl", "Mint Chip",
                  "Mocha Almond Fudge", "Rum Raisin",
                  "Praline Cream", "Mud Pie" 
            };
      String[] flav2 = {
                  "Chocolate", "Strawberry",
                  "Vanilla Fudge Swirl", "Mint Chip",
                  "Mocha Almond Fudge", "Rum Raisin",
                  "Praline Cream", "Mud Pie" 
            };
        if(flav1.equals(flav2))
    System.out.println("flav1 equals flav2 !");
    else 
    System.out.println("flav1 doesn't equals flav2 !");
        
    }
    };
    为什么结果是:
    flav1 doesn't equals flav2 很简单,数组对象是从Object对象继承下来的。当中即继承了equals()方法。而该equals()等同于==
      

  6.   

    同意楼上,equals是Object类就有的,我认为设计目的是让其它类重写equals来实现具体的要求,
      

  7.   

    你们讲问题都没到点子上,我来做总结性回答:
    ==永远比较对象(说白了就是内存地址),如果是primitive类型的话就是比值,因为primitive没有地址的概念,而如果是wrapper类型的话就是比内存地址了
    而equal要分是String还是StringBuffer,如果是String的equal的话就是比对象中的值,而StringBuffer的话就是比地址