欢迎光临
我们一直在努力

【Java 人门 Day17】常用类篇(上):Object&包装类,Java里的“老祖宗”和“伪装大师”!

家人们谁懂啊!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,这些开发里天天用的类,看完你就再也不会被字符串拼接、浮点数精度问题搞疯了!

赞(0)
未经允许不得转载:171主机测评 » 【Java 人门 Day17】常用类篇(上):Object&包装类,Java里的“老祖宗”和“伪装大师”!
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址