学习Java第二十天--Object类之getClass()方法和hashCode()方法

Object类的概念,getClass和hashCode的使用方法

11.2 Object类

11.2.1 Object类是什么

  • 超类、基类、所有类的直接或间接父类、位于继承树的最顶层;
  • 任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承;
  • Object类中所的定义的方法,是所有对象都具备的方法;
  • Object类型可以存储任何对象:
    作为参数,可接受任何对象;
    作为返回值,可返回任何对象;
public class TestBasicObject {

	public static void main(String[] args) {
		
		MyClass mc = new MyClass();
		
		Object obj = new MyClass();
		
		m1(mc);

		MyClass mc2 = m2();
	}

	public static void m1(Object obj) {//Object类型参数,可以接受任何对象
		
	}
	public static Object m2() {//Object类型返回值,可以返回任何对象
		return new MyClass();
	}
}

class MyClass{}

11.2.2 getClass()方法

  • public final Class<?> getClass(){}
  • 返回引用中存储的实际对象类型;
  • 应用:通常用于判断两个引用中实际存储对象类型是否一致;
package com.qf.Day20;
public class TestMethodForGetClass {

	public static void main(String[] args) {
		
		Animal a1 = new Dog();
		System.out.println(a1.getClass());
		
		Animal a2 = new Cat();
		System.out.println(a2.getClass());
		
		System.out.println(a1.getClass() == a2.getClass());
	}

}
class Animal{
	
}
class Dog extends Animal{}
class Cat extends Animal{}

输出结果为:

class com.qf.Day20.Dog
class com.qf.Day20.Cat
false

我们可以通过getClass()方法来对两个对象进行判断是否是同种真实类型的。

11.2.3 hashCode()方法

  • public int hashCode(){}
  • 返回该对象的十六进制的哈希码值;
  • 哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值;
  • 哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码;
public class TestMethodForHashCode {

	public static void main(String[] args) {
		
		for(int i = 0 ; i < 5 ; i++) {
			Employee e = new Employee();
			System.out.println(e.hashCode());
		}
	}
}

class Employee{}

输出结果为:

2018699554
1311053135
118352462
1550089733
865113938

那么我们如何应用hashCode(),比如我们需要向某个集合插入一个新的对象元素,我们可以为这个集合创建一个table保存集合中元素的哈希值,将需要插入的元素的哈希值与table中的哈希值比较,如果都不同,那么就可以直接插入,如果有相同的,此时我们再用equals方法来逐个进行比较,判断是否已经存在该对象。这种判断的方法,比单纯的使用equals对集合中所有的元素进行比较要快的多。

发布了34 篇原创文章 · 获赞 7 · 访问量 1293

猜你喜欢

转载自blog.csdn.net/weixin_44257082/article/details/104565254