1。基本类型,对象引用都在栈中; 而对象本身在堆中2。"=="比的是两个变量在栈内存中的值,而即使变量引用的是两个对象,“==”比的依旧是变量所拥有的“栈内存地址值”。 3。equals()是每个对象与生俱来的方法,因为所有类的最终基类就是Object(除去Object本身);而equals()是Object的方法之一。也就是说equals()方法来自Object类 观察一下Object中equals()的source code: public boolean equals(Object obj) { return (this == obj); } 注意 “return (this == obj)” this与obj都是对象引用,而不是对象本身。所以equals()的缺省实现就是比较 对象引用是否一致 所以要比较两个对象本身是否一致,须自己编写代码覆盖Object类里的equals()的方法. 来看一下String类的equals方法代码: public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }-----------OVER

评论