读书人

小弟我对基本类型和引用类型还有==和

发布时间: 2012-03-09 16:54:57 作者: rapoo

我对基本类型和引用类型,还有==和equals方法的理解。
以下是我的理解,如果有理解不正确的地方,还请前辈们指出来,感谢所有热心帮助渴望进步的晚辈们的前辈!

基本类型是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;

}


我觉得“类”、“封装”这些概念现在已经挺清晰的了。

另外,我一直在想,数组应该是一个引用类型,是一种特殊的引用类型,这种引用类型的成员都是同一种类型。我觉得数组是一种比其它引用类型更底层的引用类型。

以上如果有理解不正确的地方,还请前辈们一定指出来,再次感谢!

[解决办法]
基本正确

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

读书人网 >J2SE开发

热点推荐