家人们谁懂啊Java里的 Object 类和包装类简直是新手的“隐藏BOSS”每次面试被问到 和 equals 的区别、自动装箱拆箱都像被问住了只能尴尬挠头。今天咱们就用唠嗑的方式把这俩知识点扒得明明白白看完保证你再也不被它们搞心态一、Object类Java里的“老祖宗”所有类的亲爹Object类位于 java.lang 包中堪称Java里的“老祖宗”它是所有类的父类不管你写什么类默认都继承自Object相当于所有类的“亲爹”。- 就像你不管是谁往上追溯都有个老祖宗Java里的所有类默认都继承了Object类的方法直接就能用。1. Object类里的“四大天王”方法Object类里有几个核心方法面试和开发都高频用到咱们一个个唠1 getClass() 判断对象“真实身份”的照妖镜getClass() 方法会返回对象的真实类型就像照妖镜一样不管你用什么父类引用指向子类对象它都能给你照出真实的“真身”。- 开发里常用它来判断两个对象的类型是否一致防止类型转换异常。2 hashCode() 对象的“身份证号”hashCode() 方法会返回对象的哈希码值相当于对象的“身份证号”不同的对象默认的哈希码值不一样。就像每个人的身份证号不同的人身份证号不同不同的对象默认的哈希码也不同。3 toString() 对象的“自我介绍”toString() 方法会返回对象的字符串形式相当于对象的“自我介绍”。默认的 toString() 方法返回的是“类名哈希码”看着就像乱码所以子类通常会重写这个方法把对象的属性拼接成字符串返回方便打印对象信息。- 这样你打印 new Student() 的时候就会输出清晰的对象信息而不是乱码了。4 equals() 对象的“相亲现场”和 有啥区别这是面试的高频考点咱们先把 和 equals 掰扯清楚- Object类里的 equals() 方法底层就是用 实现的public boolean equals(Object obj) {return (this obj);}- 但实际开发中我们通常想比较对象的内容是否相同而不是是不是同一个对象所以子类要重写 equals() 方法。给你一个标准的重写模板5 finalize() 对象的“遗言”被回收前会被调用finalize() 方法是JVM垃圾回收时自动调用的相当于对象被回收前的“遗言”。垃圾对象就是没有任何引用指向的对象比如 Student s new Student(); s null; 这时候原来的对象就成了垃圾对象。​ JVM的垃圾回收器GC会自动回收垃圾对象回收的时候会调用 finalize() 方法但执行时机不可控开发里一般不写重要代码了解一下就行。二、包装类基本数据类型的“伪装大师”把数据变成对象Java里的基本数据类型 byte 、 short 、 int 、 long 、 float 、 double 、 char 、 boolean 本身不是对象不能调用方法也不能用在集合里包装类就是它们的“伪装大师”把基本数据类型包装成对象让它们也能拥有对象的能力。1. 八大基本数据类型对应的包装类2. 数据之间的转换int、Integer、String怎么互相转开发里经常要在这三种类型之间来回转给你整理了常用的转换方式- int ↔ Integer ​- int → Integer Integer i new Integer(12); 或者 Integer.valueOf(12);​- Integer → int int a i.intValue();​- String ↔ Integer ​- String → Integer Integer i new Integer(123); 或者 Integer.valueOf(123);​- Integer → String String s i.toString(); 或者 s i ;​- int ↔ String ​- int → String int a 3; String s a ;​- String → int int a Integer.parseInt(123); 注意字符串必须是纯数字不然会报 NumberFormatException 3. 自动装箱自动拆箱JDK5.0的“懒人福利”JDK5.0之后Java提供了自动装箱和自动拆箱功能基本数据类型和包装类之间可以自动转换不用手动new对象了- 自动装箱 int → Integer 比如 Integer i 12; 编译器会自动帮你转成 Integer.valueOf(12);​- 自动拆箱 Integer → int 比如 int a i; 编译器会自动帮你转成 i.intValue();面试必考点Integer缓存池Integer 类里有个缓存池默认缓存了-128~127之间的整数在这个范围内的 Integer 对象会直接从缓存里拿不会new新对象超出这个范围才会new新对象。- 所以下面的代码结果是这样的今天先唠到这Object类和包装类的套路你get到了吗下一篇咱们继续扒String类、StringBuilder、StringBuffer和BigDecimal这些开发里天天用的类看完你就再也不会被字符串拼接、浮点数精度问题搞疯了