Object类 总结篇(最新)

本文深入解析Java中Object类的功能与作用,包括toString、equals、hashCode方法的原理与重写技巧,以及线程相关方法的介绍。

1.Object类的概述

     java中所有类的基类

          java中所有类都是间接或者直接继承Object类

          Object类的引用数据类型变量可以保存java中任意数据类型的首地址

Object类内规定了一些方法:

    String toString();

         当前对象建议String类型描述,默认情况是当前类所属报名.类名@十六进制内存地址

         如果对于数据类型展示有要求,可以重写toString方法,在展示的方法中会默认执行toString方法

    int hashCode();

                 内存中当前对象的唯一索引值,默认情况下是当前对象所处空间首地址的十进制 展示

 

     boolean equals();

                 比较方法,判断两个对象是否一致,Object类默认情况下比较的方式是地址比较。两个对象地址一致,表示肯定是相同对象,如果我们期望修改equals比较规则,可以再当前类内重写

             【注意】: java中规定,如果两个对象的equals比较方法结果为 true,要求hashCode值必须一致

 

线程有关方法:

     void wait();

     void notify();

     void notifyAll();

     Class<?> getClass();

 

1.2 toString 方法

目前大家真实数据时,需要考虑使用的方法,可以通过sout方法直接展示对应的对象内容

package Object;

public class Student {
	
	private int id;
	private String name;
	
	private int age;
	
	private char gender;

	public Student() {
		super();
	}

	public Student(int id, String name, int age, char gender) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.gender = gender;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public char getGender() {
		return gender;
	}

	public void setGender(char gender) {
		this.gender = gender;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + "]";
	}
	
	

}

 

 

package Object;

public class Demo1 {
	
	public static void main(String[] args) {
		
		Student student = new Student(1,"小刘",16,'男');
		System.out.println(student);
	}

}

 

1.3equals方法

       比较两个对象是否一致,在Object类内默认方式是比较两个对象地址是否一致。  

 

 

               
    /**
     * 重写equals方法
     *    1.判断两个对象是不是同一个对象。如果调用方法的类对象和传入参数类对象地址一致,那就是同一个对象,返回true
     *    2.equals 方法参数是Object类型,那也就是说任何类型的数据都可以作为参数,两个数据类型不一致是否进行比较操作
     *    使用关键字istanceOf,同数据类型继续运行,非同类型,结束判断返回false
     *    
     *    3.判断对象中保存的数据
     *       Student中我们比较 id name age  gender就可以了
     *       
     */

	
	@Override
	public boolean equals(Object obj) {
		// 1.判断不是不是同地址对象
		
		if(this == obj){
			return true;
		}
		
		//2. 数据类型是否一致
		if(!(obj instanceof Student)){
			return false;
		}
		//数据强制类型转换
		Student stu = (Student) obj;
		
		return this.id == stu.id 
				//this.name.equals(stu.name) 该equals方法时String类equals方法
				&&this.name.equals(stu.name)
				&&this.age == stu.age
				&&this.gender == stu.gender;
				
	}

1.4hashCode方法

在Object类内,hashCode方法,返回的内容是当前对象的空间首地址十进制展示方式

当前类重写equals方法之后,两个当前类对象比较结果为true,那么要求这两个对象的hashCode必须一致!

     hashCode使用有一个唯一原则。一般会参考参与equals比较的所有成员变量来组成成员对应的hashCode,这里会使用到一些java中提供计算哈希值的方法。

 

hashCode使用未进行重写的情况下,会使用地址作为hashCode对应的数据,重写之后,不再使用地址,重写之后hashCode不对应当前对象所在地址

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值