Java入门(十四)——Object
目录
JDK类库的根类:object
- 寻找方法:源代码、java的类库帮助文档
* API:
- 应用程序编程的接口
- 整个JDK的类库就是一个Java SE的API
- 每一个API都会配置一套API帮助文档
* 主要需要学的方法:
- protected Object clone() //负责对象克隆的
- int hashCode() //获取对象哈希值的一个方法
- boolean equals(object obj) //判断两个对象是否相等
- String toString() //将对象转换成字符串形式
- protected void finalize() //垃圾回收器负责调用的方法
hashCode()
- 源代码:public native int hashCode();
- 不是抽象方法,带有native关键字,是底层c++程序
- 返回值是哈希码
equal()
* 源代码:
public boolean equal(Object obj){
return (this == obj);
}
- 目的:判断两个对象是否相等
- 因为object类中equal方法当中,默认采用的是“==”判断是否相等,
但是这个不能判断java对象的值,只能判断java对象的内存地址,所以一些情况下需要重写
* 使用时刻:
* 默认情况调用的“==”:
- 基本数据类型比较
* equal重写:
- 引用数据类型
toString()
public String toString() {
return this.getClass().getName()+"@"+Integer.toHexString(hashCode());
}
- 源代码上toString()方法的默认实现是:
类名@对象的内存地址转换为十六进制的形式
- 目的:通过调用这个方法可以将一个“java对象”转换为“字符串”
- 建议所有的子类都去重写toString()方法
finalize()
- 源代码:protected void finalize()
- 只有一个方法体,里面没有代码,是protected修饰的
- 不需要手动调用,JVM的垃圾回收器调用这个方法
- 执行时机:java对象即将被抛弃时
- 可以重写这个代码,显示被回收时的提示
范例代码
public class Object {
public static void main(String[] args) {
Test02 t=new Test02();
System.out.println(t);
//未重写toString()方法之前,priv.pdd.java.classNotes5.Time01@4361bd48
//重写之后,的数值为所定义的返回值
Test03 tt=new Test03();
System.out.println(tt.t1());//普通数值对比,false
System.out.println(tt.t2());//String对比,true
System.out.println(tt.t3());//String对象对比,true
Test03 tt1=new Test03(20);
Test03 tt2=new Test03(20);
System.out.println(tt1.equal(tt2));//对象对比,equal方法执行,false
}
}
class Test02{
public Test02(){
}
public String toString() {
return "这里是toString()方法的重写";
}
}
class Test03{
public boolean t1() {
int i=20,j=70;
return i==j;
}
public boolean t2() {
String i="张三",j="张三";
return i==j;//如果是直接String定义的话,可以使用“==”判断
}
public boolean t3() {
String i=new String();
String j=new String();
i="张三";
j="张三";
return i==j;//如果是String定义的对象,不可以随便使用“==”判断,应将equal重写
}
public Test03() {}
public Test03(int i) {
System.out.println("数值---->"+i);
}
public boolean equal(Test03 obj){
if(obj == null) {
return false;
}
else if(!(obj instanceof Test03)) {
return false;
}
if(this == obj) {
return true;
}
return false;
}
}