1.equals
我们先看Object中的equals方法,发现它是比较对象的地址。
public boolean equals(Object obj) {
return (this == obj);
}
实际开发中我们经常会用到String,Integer等类的equals方法,我们先看看源码:
Integer
//Integer
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
String中的equals:
//String
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
我们发现它是对值进行了比较。实际开发中我们可能会重写equals方法。
我们要注意的是equals和==的区别,下面举一个例子。
String str1=new String("1");
String str2=new String("1");
String str3=str2;
System.out.println(str1==str2);//false
System.out.println(str1.equals(str2));//true
System.out.println(str3==str2);//true
System.out.println(str3.equals(str2));//true
==号比较的是地址,对于引用类型来说,上面的例子的对象地址是不同的,equals比较的是值。
2.hashCode
对hachCode的总结可看下面的小结:
hashCode主要是对对象的内容生成一串整数。
3.finalize
关于finalize可看下面的总结:
finalize方法就相当于C++中的析构函数,在对象销毁时执行,里面可自定义一些内容,比如释放数据库连接等资源。
欢迎一键三连,后续会更新更多关于java技术栈方面的知识。



