目录
一、Object类
1、所有class类的共同父类
Object类是java中所有类的默认父类,无须使用extends来继承,只要是class声明的类,就都会有共同的父类Object类。(java.lang.Object)
提问:为什么要有Object父类呢?
①因为Object类对所有类的父类,所以就可以使用Object引用来接受所有类型,实现参数最该统一化,java中的所有类型都可以发生向下转型变为Object类型(不包括基本数据类型)。
Object obj1=new Person();
Object obj2=new String();
Object obj3=new Cat();
2、子类继承了Object的所有方法
子类继承了Object的所有方法
之所以System.out,println(任意数据类型)都可以打印输出值,是因为都默认调用该类型的toString方法,Object中存在toString()
3、JDK对Object类的扩展
Onject不仅可是所有类(class声明)的父类,IDK还对Object做了扩展,Object类可以接收所有数据类型(接口,数组,类)
4、注意Object不能接收8大基本类型
除了8大基本类型之外,所有类型都可以用Object来接收,所有类型都能使用Object来接收。
基本类型和包装类有关。
二、包装类
1、包装类的引出
包装类就是把8大类型封装到类之中
①为了让Object类可以接收java中的所有内容,就引入包装类,把基本类型的数值封装到类的对象中就产生了包装类
②基本类型的默认值在很多场景下回造成误导
在扣费中,假设当前费用*费率=实际扣款数
如果费率是double类型,默认值就是0.0,就会产生异议,不确定到底是免费(费率为0.0)还是输入错误时默认为0.0
如果使用的是double的包装类Double,默认值就是null,就跟明确的知道是否出错
2、JDK中中的包装类
3、包装类的使用
以整型为例 int->Integer Inteher->int
//int ->Integer
int val=10;
Integer a=new Integer(val);
//此时Object类就可以接收a
Object obj=a;
//Ingeter->int
int ret=a.intValue();
System.out.println(ret);
4、拆箱和装箱
装箱:将基本类型的数值保存在包装类对象中
拆箱:将包装类对象中的数值还原为基本类型
自动拆装箱:经过java编译器的优化,使用包装类就和使用基本类型一样
注意:包装类比较仍旧使用equals方法比较
提问:为啥下图第二行又输出true?
总结:只要是引用类型的比较一律使用equals方法比较就不会出错