Java入门(十四)——Object

本文介绍了JavaObject类中的核心方法,如hashCode(),equals(),toString(),finalize(),以及如何重写这些方法以满足不同场景的需求。通过实例展示了如何使用这些方法进行对象比较和内存地址表示。
摘要由CSDN通过智能技术生成

Java入门(十四)——Object

目录

Java入门(十四)——Object

JDK类库的根类:object

hashCode()

equal()

toString()

finalize()

范例代码


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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值