转自:http://kakajw.iteye.com/blog/935226 一.java对象的比较 等号(==): 对比对象实例的内存地址(也即对象实例的ID),来判断是否是同一对象实例:又可以说是判断对象实例是否物理相等: equals(): 对比两个对象实例是否相等. 当对象所属的类没有重写根类Object的equals()方法时,equals()判断的是对象实例的ID(内存地址),是否是同一对象实例:该方法就是使用的等号(==)的判断结果,如Object类的源代码所示: public b
两个对象用equals方法比较为true,它们的Hashcode值相同吗? 答:不一定相同.正常情况下,因为equals()方法比较的就是对象在内存中的值,如果值相同,那么Hashcode值也应该相同.但是如果不重写hashcode方法,就会出现不相等的情况. 下面的话来自JDK: hashCode public int hashCode()返回该对象的哈希码值.支持此方法是为了提高哈希表(例如 Java.util.Hashtable 提供的哈希表)的性能.
1.equal方法 Object类中的equal方法用于检测一个对象是否等于另外一个对象.在Object类中,这个方法将判断两个对象是否具有相同的引用.如果两个对象具有相同的引用,它们一定是相等的.然而对于多数类来说,这种判断并没有什么意义,因为经常需要检测两个对象状态是否相等,如果两个对象的状态相等,就认为这两个状态是相等的. 先来看一下Object类中的equals方法的源码: * @param a an object * @param b an object to be compared
这个问题百度上有很多答案 有一次面试的时候,面试官也提到了这个问题.我回答了两个对象,并且解释了一个对象是 "123" 存在了字符串常量池,另一个是 s 所引用的堆中的对象. 但是面试官忽然来了一句,让我佐证一下. 我当时有点不知所措,又是扯hashcode,又是扯堆栈,感觉自己都没有回答出问题的关键. 不过现在我已经知道了 public class Test { public static void main(String[] args) { String s="123&q