( 转)关于==和equals()

在java中内存分为 “栈”和“堆”(Stack and Heap) 基本数据类型存储在 "栈"中
对象引用类型实际存储在 "堆"中,在“栈”中只是保留引用内存的地址值,就好像知道你家门牌号码就可以找到你家。

在Java中利用"=="比较变量时候,系统使用变量在stack(栈)中所存的值来作为对比的依据,基本数据类型(int float double

boolean)在stack中所存的值就是其內容值,而引用类型在stack中所存放的值是本身所指向Heap中对象的地址值,而不是原先所設定的值。

Java.lang包中的Object类有public boolean equals (Object obj)方法。它比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。
    ==运算符也进行等值比较。也就是说,对于任何引用值X和Y,当且仅当X和Y指向同一对象时, X==Y返回真。
    当两个分离的对象的内容和类型相配的话,String,Date,File类和所有其它override equals()的包装类(Integer,Double,等等)将返回真。
    例如,String类中的equals()方法返回true,当且仅当参数不为null并且是一个String对象,该对象与调用该方法的String对象具有相同的字符顺序。
String s1=new String(“JDK1.2”);
String s2=new String(“JDK1.2”);
方法s1.equals(s2)返回真,尽管s1和s2指向两个不同的对象。

方法是可以被重载的,按照java语言的本意来说:如果没有重写(override)
新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,
但是java推荐的是使用equals()方法来判断两个对象的内容是否一样.也就是说一般的类的比较使用override的equals()比较的是Heap而不是stack中的内容

你可能感兴趣的:(equals())