Object类和包装类
11.1 Object类
11.1.1 Object类介绍
Object对象是除了基础类型之外,所有的对象都需要继承的父对象,包括数组也继承了Object。
11.1.2 Object类常见方法
-
public native int hashCode();
作用:返回对象的哈希码
-
public boolean equals(Object obj);
作用:用于比较
11.1.3 ==号与equals方法比较及equals方法重写
-
==号
如果作用于基本数据类型变量,直接比较值;
如果作用于引用类型的变量,比较的是所指向的对象的地址;
-
equals方法
如果没有对equals方法进行重写,比较的是所指向的对象的地址;
如果已经对equals方法进行了重写,就按重写的逻辑进行处理;
注意事项:equals方法不能用于比较基本数据类型变量
11.1.4 hashcode方法和重写
-
HashCode概要
如果两个对象相同,equals一定返回true,且两个对象的HashCode一定相同;
如果两个对象的HashCode相同,两个对象不一定相同,即equals()的值不一定为true,只能表明这两个对象在一个散列存储结构中;
-
HashCode作用
-
提高了读取对象的效率
从Object角度看,JVM【Java虚拟机】new一个Object,它都会将这个Object丢到一个Hash表中去,下次做Object的比较或者取这个对象的时候【读取操作】,它会根据对象的HashCode再从Hash表中取这个对象。这样做的目的是提高读取对象的效率。若HashCode相同再去调用equals。
-
hashSet等存储数据的依据
hashCode是一个标识,到散列表中去找该对象的一个标识,如果相同的hashCode的类放于相同的散列表中,然后在通过equals进一步选出散列表中对应的对象。因此相同标识下的类不能重复
-
11.1.5 Object类的其它方法应用
public native int hashCode();
public boolean equals(Object obj);
protected native Object clone();
public String toString();
public final native void notify();
public final native void notifyAll();
public final native void wait(long timeout) throws InterruptedException;
public final void wait(long timeout, int nanos) throws InterruptedException;
protected void finalize() throws Throwable;
11.2 包装类及其使用
11.2.1 什么是包装类
为了支持Java语言面向对象的特性,基本数据类型中的每一个在java.lang包中都有一个对应的包装类,即将每个基本类型都包装成了一个类。
基本类型 | 包装类 |
---|---|
byte | java.lang.Byte |
short | java.lang.Short |
int | java.lang.Integer |
long | java.lang.Long |
float | java.lang.Float |
double | java.lang.Double |
char | java.lang.Character |
boolean | java.lang.Boolean |
11.2.2 包装类和基本类型的转换
-
基础类型转换成包装类【又称为装箱操作,装箱又分为手动装箱和自动装箱】
int a=1;//定义int类型变量
Integer b=new Integer(a);//手动装箱
Integer d=Integer.valueOf(a);//手动装箱
Integer c=a;//自动装箱 -
包装类转换成基础类型【又称为拆箱操作,拆箱又分为手动拆箱和自动拆箱】
Integer x=new Integer(100);//定义Integer类型的包装类对象
int y=x.intValue();//手动拆箱
int z=x;//自动拆箱system.out.println(x+z); //Integer x变为int x
11.2.3 包装类的作用
-
包含了每种基本数据类型的相关属性,如最大值、最小值等;
-
集合不允许存放基本数据类型,只允许存放对象类,故常用包装类;
-
作为基本数据类型对应的类类型,提供了一系列实用的对象操作,如类型转换、进制转换等;
面试要点:==和equals()
口述hascode方法和重写