【Java】常用API——Object、StringBuilder、包装类

🔎这里是【Java】,关注我学习Java不迷路
 👍如果对你有帮助,给博主一个免费的点赞以示鼓励
 欢迎各位🔎点赞👍评论收藏⭐️
👀专栏介绍
【Java】 目前主要更新Java,一起学习一起进步。
👀本期介绍
本期主要介绍常用API——Object、StringBuilder、包装类
文章目录
1. Object类
1.1 概述
 java.lang.Object 
 类是
 Java
 语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使
 
 
 用。在对象实例 
 
 
 化的时候,最终找的父类就是
 Object
 。 
 
 
 如果一个类没有特别指定父类, 
 
 
 那么默认则继承自
 Object
 类。例如
 
 
 根据
 JDK
 源代码及
 Object
 类的
 API
 文档,
 Object
 类当中包含的方法有
 11
 个。今天我们主要学习其中
 
 
 的
 2
 个: 
 
 
 public String toString() 
 :返回该对象的字符串表示。 
 
 
 public boolean equals(Object obj) 
 :指示其他某个对象是否与此对象
 “
 相等
 ”
 。 
 
1.2 toString方法
 方法摘要 
 
 
 public String toString() 
 :返回该对象的字符串表示。 
 
 
 toString
 方法返回该对象的字符串表示,其实该字符串内容就是对象的类型
 +@+
 内存地址值。 
 
 
 由于
 toString
 方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符
 
 
 串表现形式,因 
 
 
 此也需要重写它。 
 
 
 覆盖重写 
 
 
 如果不希望使用
 toString
 方法的默认行为,则可以对它进行覆盖重写。例如自定义的
 Person
 类: 
 
 
 在
 IntelliJ IDEA
 中,可以点击 
 Code 
 菜单中的 
 Generate... 
 ,也可以使用快捷键 
 alt+insert 
 ,点击 
 
 
 toString() 
 选 
 
 
 项。选择需要包含的成员变量并确定。如下图所示: 
 
 
 小贴士: 
 
 
 在我们直接使用输出语句输出对象名的时候
 ,
 其实通过该对象调用了其
 toString()
 方法。 
 
1.3 equals方法
 方法摘要 
 
 
 public boolean equals(Object obj) 
 :指示其他某个对象是否与此对象
 “
 相等
 ”
 。 
 
 
 调用成员方法
 equals
 并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的
 “
 相
 
 
 同
 ”
 有默认和自定 
 
 
 义两种方式。 
 
 
 默认地址比较 
 
 
 如果没有覆盖重写
 equals
 方法,那么
 Object
 类中默认进行 
 == 
 运算符的对象地址比较,只要不是同
 
 
 一个对象,结果 
 
 
 必然为
 false
 。 
 
 
 对象内容比较 
 
 
 如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆
 
  
 
 盖重写
 equals
 方 
 
 
 法。例如: 
 
 

 这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数
 IDE
 都可以自动生
 
 
 成
 equals
 方法的 
 
 
 代码内容。在
 IntelliJ IDEA
 中,可以使用 
 Code 
 菜单中的 
 Generate… 
 选项,也可以使用快捷键 
 
 
 alt+insert 
 ,并选 
 
 
 择 
 equals() and hashCode() 
 进行自动代码生成。如下图所示:
 
 
 
 
tips:Object类当中的hashCode等其他方法,今后学习。
1.4 Objects类
 在刚才
 IDEA
 自动重写
 equals
 代码中,使用到了 
 java.util.Objects 
 类,那么这个类是什么呢?
 
 
  在
  JDK7
  添加了一个
  Objects
  工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组
 
 
  
 
  成,这些方法是 
 
 
  
 
  null-save
  (空指针安全的)或
  null-tolerant
  (容忍空指针的),用于计算对象的
  hashcode
  、返回对
 
 
  
 
  象的字符串表 
 
 
  
 
  示形式、比较两个对象。 
 
 
  
 
  在比较两个对象的时候,
  Object
  的
  equals
  方法容易抛出空指针异常,而
  Objects
  类中的
  equals
  方法
 
 
  
 
  就优化了这个问 
 
 
  
 
  题。方法如下: 
 
 
  
 
  public static boolean equals(Object a, Object b) 
  :
  判断两个对象是否相等。 
 
 
  
 
  我们可以查看一下源码,学习一下: 
 
 
  
 2. StringBuilder类
2.1 字符串拼接问题
  由于
  String
  类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对
 
 
  
 
  象。例如: 
 
 
  
 在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被更改。
  根据这句话分析我们的代码,其实总共产生了三个字符串,即 
  "Hello" 
  、 
  "World" 
  和 
  "HelloWorld" 
 
 
  
 
  。引用变量
  s 
 
 
  
 
  首先指向 
  Hello 
  对象,最终指向拼接出来的新字符串对象,即 
  HelloWord 
  。 
 
 
  
 
  由此可知,如果对字符串进行拼接操作,每次拼接,都会构建一个新的
  String
  对象,既耗时,又浪
 
 
 费空间。为了解
  决这一问题,可以使用 
  java.lang.StringBuilder 
  类。 
 
 
 2.2 StringBuilder概述
  查阅 
  java.lang.StringBuilder 
  的
  API
  ,
  StringBuilder
  又称为可变字符序列,它是一个类似于 
  String 
  的
 
 
  
 
  字符串缓冲 
 
 
  
 
  区,通过某些方法调用可以改变该序列的长度和内容。 
 
 
  
 
  原来
  StringBuilder
  是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对
 
 
  
 
  其中的字符串进 
 
 
  
 
  行各种操作。 
 
 
  
 
  它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。
 
 
  
 
  StringBuilder
  会自动 
 
 
  
 
  维护数组的扩容。原理如下图所示:
 
 
  
 
  (
  默认
  16
  字符空间,超过自动扩充
  ) 
 
 
  
 2.3 构造方法
   根据
   StringBuilder
   的
   API
   文档,常用构造方法有
   2
   个: 
  
 
   
  
   public StringBuilder() 
   :构造一个空的
   StringBuilder
   容器。 
  
 
   
  
   public StringBuilder(String str) 
   :构造一个
   StringBuilder
   容器,并将字符串添加进去。
  
 
   
  2.4 常用方法
    StringBuilder
    常用的方法有
    2
    个: 
   
 
    
   
    public StringBuilder append(...) 
    :添加任意类型数据的字符串形式,并返回当前对象自身。 
   
 
    
   
    public String toString() 
    :将当前
    StringBuilder
    对象转换为
    String
    对象。 
   
 
    
   
    append
    方法 
   
 
    
   
    append
    方法具有多种重载形式,可以接收任意类型的参数。任何数据作为参数都会将对应的字符
   
 
    
   
    串内容添加到 
   
 
    
   
    StringBuilder
    中。例如: 
   
 
    
   
    备注:
    StringBuilder
    已经覆盖重写了
    Object
    当中的
    toString
    方法。 
   
 
    
   
    toString
    方法 
   
 
    
   
    通过
    toString
    方法,
    StringBuilder
    对象将会转换为不可变的
    String
    对象。如:
   
 
    
3. 包装类
3.1 概述
  Java
  提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建
 
 
  
 
  对象使用,因为 
 
 
  
 
  对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包
 
 
  
 
  装类,如下:
 
 
 
3.2 装箱与拆箱
  基本类型与对应的包装类对象之间,来回转换的过程称为
  ”
  装箱
  “
  与
  ”
  拆箱
  “
  : 
 
 
  
 
  装箱
  :从基本类型转换为对应的包装类对象。 
 
 
  
 
  拆箱
  :从包装类对象转换为对应的基本类型。 
 
 
  
 
  用
  Integer
  与 
  int
  为例:(看懂代码即可) 
 
 
  
 
  基本数值
  ---->
  包装对象 
 
 
  
 包装对象---->基本数值

3.3自动装箱与自动拆箱
  由于我们经常要做基本类型与包装类之间的转换,从
  Java 5
  (
 
 
  
 
  JDK 1.5
  )开始,基本类型与包装类的装箱、拆箱动作 
 
 
  
 
  可以自动完成。例如: 
 
 
  
 3.3 基本类型与字符串之间的转换
 基本类型转换为
 String 
 
 
 基本类型转换
 String
 总共有三种方式,查看课后资料可以得知,这里只讲最简单的一种方式: 
 
 
 String
 转换成对应的基本类型 
 
 
 除了
 Character
 类之外,其他所有包装类都具有
 parseXxx
 静态方法可以将字符串参数转换为对应的
 
 
 基本类型: 
 
 
 public static byte parseByte(String s) 
 :将字符串参数转换为对应的
 byte
 基本类型。 
 
 
 public static short parseShort(String s) 
 :将字符串参数转换为对应的
 short
 基本类型。 
 
 
 public static int parseInt(String s) 
 :将字符串参数转换为对应的
 int
 基本类型。 
 
 
 public static long parseLong(String s) 
 :将字符串参数转换为对应的
 long
 基本类型。 
 
 
 public static float parseFloat(String s) 
 :将字符串参数转换为对应的
 flfloat
 基本类型。 
 
 
 public static double parseDouble(String s) 
 :将字符串参数转换为对应的
 double
 基本类型。 
 
 
 public static boolean parseBoolean(String s) 
 :将字符串参数转换为对应的
 boolean
 基本类型。 
 
 
 代码使用(仅以
 Integer
 类的静态方法
 parseXxx
 为例)如: 
 

 注意
 :
 如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出 
 
 
 java.lang.NumberFormatException 
 
 
 异常。 
                
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号