以下是我的理解,如果有理解不正确的地方,还请前辈们指出来,感谢所有热心帮助渴望进步的晚辈们的前辈!基本类型是java里最基础的类型,所有的引用类型都基于基本类型。不说String类吧,我感觉它比较特殊,它是由基本类型构成的引用类型(字符数组)和其它基本类型构成的。随便写一个简单的类:class A{
    private int i;
    pvivate boolean b;
}这个类就是由int和boolean这两种基本类型构成的,当然,它可以有自己的其它方法。不,在java里,随便一个类肯定有自己的方法,因为它们都继承自Object。所谓类,就是基本类型和方法的组合。而==是用于比较基本类型的值,或者用于比较引用类型的地址(我在想也许内存地址也是一种基本类型)。而equals是基于==,通过==比较封装在引用类型里的基本类型的值来比较引用类型是否相等的。所有类型的基类Object类,它的equals方法源代码只有一句:
public boolean equals(Object obj) {
return (this == obj);
    }再看看特殊的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;
    }
}仔细看,都是通过比较基本类型!=或者==来返回equals的值的。我上面的那个类的equals方法可以写成
public boolean equals(Object obj) {
if (this == obj) {
    return true;
}
if (obj instanceof A) {
             if(this.i==obj.i && this.b==obj.b)
                 return true;
}
         return false;    }
我觉得“类”、“封装”这些概念现在已经挺清晰的了。另外,我一直在想,数组应该是一个引用类型,是一种特殊的引用类型,这种引用类型的成员都是同一种类型。我觉得数组是一种比其它引用类型更底层的引用类型。以上如果有理解不正确的地方,还请前辈们一定指出来,再次感谢!

解决方案 »

  1.   

    to 同等水平的:那个String代码不完整,有些变量是之前声明的,如果没看过String源码的不理解可以去翻源码看看。太长了,不好贴。
      

  2.   

    基本正确关于equals的方法不是很完整,其实equals首先比较是否是当前对象,也就是自身和自身比较,如果是则返回true,否则比较对象是否是当前类类型的,是的话才比较内部的数据
      

  3.   

    代码好像错了,我改改: public boolean equals(Object obj) {
    if (this == obj) {
    return true;
    }
    if (obj instanceof A) {
    A anotherA = (A) obj;
    if (this.i == anotherA.i && this.b == anotherA.b)
    return true;
    }
    return false; }好了,呵呵。