这几天在看thinking in java 4th,今天看到关于equals的用法....感觉有点模糊...书上的例子是这样的:
class Value
{
int i;
}
public class EqualsMethod
{
public static void main(String [] args)
  {
     Value v1 =new Value();
     Value v2 =new Value();
  v1.i=v2.i =100 ;
   System.out.println(v1.equals(v2));
  }
}

解决方案 »

  1.   

      当操作符"=="两边都是引用类型的变量时,这两个引用必须都引用同一个对象,结果才为true.
    equals()方法是在Object类中定义的方法,声明格式:public boolean equals(Object obj) 比较规则是:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则false.  另外,JDK中有些类,比如java.lang.String类的equals()方法比较规则是:如果两个对象的类型一致,并且内容一致,就返回true.  Boolean b1 = new Boolean(true) ;
      Boolean b2 = new Boolean(true) ;
      if(b1==b2)
        if (b1.equals(b2))
           System.out.println("a") ;
        else
           System.out.println("b") ;
      else
        if(b1.equals(b2))
           System.out.println("c") ;
        else
           System.out.println("d") ;所以,比较后的输出结果应该是 c
      

  2.   

    ==比较对象的内存地址
    如果 i==j 返回的是true,这时i和j的hascode相等equals比较的值
    如果 i.equals(j) 返回的是true,这时i和j的hascode不一定相等
      

  3.   

    ==是比较是比较对象的引用,equals()是比较对象的内容(或值)是否相等.
      

  4.   

    所谓的equals 比较内容,有个前提,那就是那个对象必须有正确的equals方法class   Value 

    int   i;@Override
    public boolean equals(Object obj) {
      if (this == obj)
        return true;
      if (obj == null)
        return false;
      if (getClass() != obj.getClass())
        return false;
      final Value other = (Value) obj;
      if (i != other.i)
        return false;
      return true;

      
      

  5.   

    对于基本类型来说,因为没有引用所以直接用==比较值
    int,double等等
    int a = 1;
    int b = 2;
    int c = 1;
    System.out.println(a == b);
    System.out.println(a == c);对于对象来说,因为JAVA全部是引用
    所以直接使用==就是比较了他的引用地址,而不是值
    String a = "1";  //假设内存地址为0x00000001
    String b = "2";  //假设内存地址为0x00000002
    String c = "1";  //假设内存地址为0x00000003
    System.out.println(a == b); //0x00000001不等于0x00000002 返回false
    System.out.println(a == c);//0x00000001不等于0x00000003 返回falseSystem.out.println(a.equals(b)); //a的值是'1' b的值是'2' 返回false
    System.out.println(a.equals(c)); //a的值是'1' c的值是'1' 返回true
      

  6.   

    to:8楼
    String   a   =   "1";     //假设内存地址为0x00000001 
    String   c   =   "1";     //假设内存地址为0x00000003 
    这两个会分配不同的内存地址吗?
    在object 里,==和equals()比较的是一样效果,我们在用时候,要重写equals()方法,
    我们要什么效果,就改写成什么效果!String类已经重写了这个方法,比较的是两个对象是否
    有相同的字符序列。
      

  7.   

    Value v1 = new Value();
    value v2 = new Value();
    由于你没有重写equals()方法,所以此时用==和equals()方法的效果是一样的。由于你没有重写equals()方法,所以此时用==和equals()方法的效果是一样的。
    比较的都是内存里的地址。这里的地址是不同的,因为new了两个不同的对象!
      

  8.   

    用String只是假设给你看,String再类里属于一个特例
    就是说这个意思,类对象的引用地址
      

  9.   

    ==比较的是对象的地址equals默认也是对象的地址,但你可以通过复写一个类中的
    该方法实现比较逻辑(这个逻辑你自己写),返回的是一个boolean变量