对于没有重载了equals这个方法的那些类,两个是一致的。
只有重载了才有区别,如:String就重载了这个方法。所以它才是判断里面的值。所以你这样的说法是不太正确的。

解决方案 »

  1.   

    OKOK,那么你们能不能给出一个关于==和equals()区别的绝对正确的说法?
      

  2.   

    给你一份我整理的equals()和==的比较因为equals()方法是可以被重载的,但是按照java语言的本意来说:如果没有重写(override)新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,但是java推荐的是使用equals()方法来判断两个对象的内容是否一样,就像String类的equals()方法所做的那样:判定两个String对象的内容是否相同,而==操作符返回true的唯一条件是两个变量指向同一对象。另外==操作符两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。首先 == 可以比较 基本类型和引用类型,而比较引用类型时, 比较首地址。 而equal 只能比较引用类型 ,比较首地址。但是 equal在比较封装类时 比较的是数据类型和值的大小
    引用类型进行引用比较,但有四个类型除外:File、Date、String、封装类。对它们用equals()进行比较时,如果类型一致,且与它们相联系的内容一致,则返回true。
      

  3.   

    由于Java没有操作符重载,所以==只有一个意思,大概就是用来比较2个引用类型的
    reference是否指向同一个“内存对象”(即内存地址是否相同),或是两个基本类型
    的值是否相同java.lang.Object::equals(...)缺省代码是这样的:
        public boolean equals(Object obj) {
    return (this == obj);
        }
    所以:
     - 你如果不override equals(...)得话,就和==一样
     - 你可以按照一定的策略来任意override equals(...),但要注意
       这时你可能要同时override下列2个(如在EJB中):
       java.lang.Object::equals(...)    
       java.lang.Object::hashCode(...)
       有时还要override第3个: 
       java.lang.Object::clone(...)    
       即:要保持这3个行为要么都符合你的策略,要么都符合缺省的策略,
       否则某些操作(如涉及java.util.Hashtable)会出现不一致的错误
      

  4.   

    equals()方法实际上比较的是两个对象的hashCode()方法的返回值,如果两个引用指向相同的对象,那么hashCode()的返回值肯定是相同的。而如果不是相同的对象,即使来源于同一个类,也不会有相同的hashCode()值,因此默认时会与==有相同的结果。
    所以,如果你重载equals()方法,同时也应该重载hashCode(),以保证你认为相等的对象具有相同的hashCode()。
      

  5.   

    hashCode()是什么?干什么用的?
      

  6.   

    每一个类都会有这个方法,当其实例化时,会自动调用hashCode()为其计算出一个int值。大概类似于,这个对象的一个唯一的标示
      

  7.   

    hashCode()是产生一个唯一标示这个对象的int值,
    至于怎么能是唯一的,这个问题应该不难吧。
      

  8.   

    照这么说的话,hashCode()是当对象初始化后就产生了,而且不变了喽?那么请看这个程序:
    public class SL275
    {
      public static void main(String args[])
      {
        Object o1=new Object();
    Object o2=new Object();
    System.out.println("o1="+o1.hashCode());
    System.out.println("o2="+o2.hashCode());
    o1=o2;
    System.out.println("o1="+o1.hashCode());
    System.out.println("o2="+o2.hashCode());
      }
    }
    你们试试看编译后运行的结果。为什么在o1=o2;语句后,也就是o1和o2的值都是指向原来的o2初始化的对象的地址后,o1的hashCode()会变成和o2一样,不是说hashCode()是对象唯一的标识符吗?是不是因为hashCode()本身是属于对象内容的一个部分啊?
      

  9.   

    o1和o2现在是同一个对象的引用,当然hashcode会一样了
      

  10.   

    这样o1=o2;也就是o1和o2都指向那个指向o2对象的内容存放的地址的指针喽?那么o1=o2后o1和o2的hashCode()相同,到底hashCode()是属于对象的内容部分,还是。?