Skip to content

一、包装类 (Wrapper Class) ​

1. 基本介绍 ​

  • 目的:为八种基本数据类型提供对应的引用类型,使其具有类的特性(如调用方法)。

  • 分类:

    • Boolean, Character (继承关系特殊)
    • Byte, Short, Integer, Long, Float, Double (均继承自 Number 类)

2. 装箱与拆箱 ​

  • 装箱:基本类型 → 包装类型。

  • 拆箱:包装类型 → 基本类型。

  • JDK5前后:

    • JDK5前:手动 (new Integer() / intValue() )。
    • JDK5后:自动(编译器完成,底层调用 valueOf() 和 xxxValue())。

3. 与String类型的转换 ​

  • 包装类 → String:

    1. Integer i = 100; String str1 = i + “”;
    2. String str2 = i.toString();
    3. String str3 = String.valueOf(i);
  • String → 包装类:

    1. Integer i1 = Integer.parseInt(“123”); (返回 int,可自动装箱)
    2. Integer i2 = new Integer(“123”);

4. 常用方法与面试题 ​

  • Integer/Character常用方法:

    • Integer.parseInt(String s)
    • Character.isDigit(char ch) / isLetter() / isUpperCase() / isLowerCase()
    • Character.toUpperCase(char ch) / toLowerCase()
  • 重要面试题(Integer缓存机制):

    • Integer 类在 -128 到 127 之间有一个缓存数组。
    • 通过自动装箱或 Integer.valueOf() 在这个范围内取值,会直接返回缓存中的对象。
    • 例如:Integer i1 = 127; Integer i2 = 127; 则 i1 == i2 为 true。Integer i3 = 128; Integer i4 = 128; 则 i3 == i4 为 false。

二、String 类 ​

1. 基本特性 ​

  • final 类,不可被继承。
  • 实现了 Serializable (可序列化) 和 Comparable (可比较) 接口。
  • 用于保存字符串,底层是 private final char value[] (JDK8及之前) 或 byte[] (JDK9及之后)。
  • 不可变性:value 数组引用地址不可变,内容可变但不会影响已创建的String对象。任何修改都会创建新对象。

2. 创建对象的两种方式与内存分配 ​

  1. 直接赋值:String s = “hsp”;

    • 先从常量池查找是否有 ”hsp”,有则直接指向;无则创建后指向。
    • s 指向常量池地址。
  2. 调用构造器:String s = new String(“hsp”);

    • 先在堆中创建对象,其 value 属性指向常量池中的 ”hsp” (若无则创建)。
    • s 指向堆中对象地址。

3. 字符串的特性与面试题 ​

  • 常量相加:String s = “a” + “b”; 编译器会优化为 ”ab”,在常量池中只生成一个对象。

  • 变量相加:String a = “a”; String b = “b”; String c = a + b;

    • 底层使用 StringBuilder 进行 append 操作,最后 toString() 返回一个新对象在堆中。
    • c 指向堆地址。
  • intern() 方法:返回字符串在常量池中的地址。

    • 如果常量池已包含该字符串,则返回池中地址。
    • 否则,将该字符串对象添加到池中,并返回此对象的引用。

4. 常用方法 ​

  • 比较:equals, equalsIgnoreCase, compareTo
  • 查找:indexOf, lastIndexOf, charAt
  • 截取/替换:substring, replace
  • 转换:toUpperCase, toLowerCase, toCharArray
  • 分割/拼接:split (注意转义), concat
  • 格式化:String.format(“格式”, 参数…) (占位符: %s, %d, %.2f, %c)
  • 其他:trim, length, isEmpty

三、StringBuffer 与 StringBuilder ​

1. 基本介绍 ​

  • 共同点:代表可变的字符序列,是对String在需要频繁修改时效率低下的补充。底层也是 char[] 存储,但非final,可扩容。
  • 关系:均继承自 AbstractStringBuilder。

2. 三者对比 ​

特性StringStringBufferStringBuilder
可变性不可变 (final char[])可变可变
线程安全安全 (不可变)安全(方法有 synchronized 修饰)不安全
效率低 (频繁修改会创建大量对象)较高最高
使用场景少量字符串操作,或作为常量多线程环境下大量字符串操作单线程环境下大量字符串操作

3. StringBuffer/StringBuilder 常用方法 ​

  • 增:append
  • 删:delete(start, end)
  • 改:replace(start, end, str), setCharAt
  • 查:indexOf
  • 插:insert(offset, str)
  • 长度:length
  • 遍历:for() + charAt()

4. 相互转换 ​

  • String → StringBuffer/StringBuilder:

    1. 构造器:new StringBuffer(String str)
    2. append:new StringBuffer().append(str)
  • StringBuffer/StringBuilder → String:

    1. toString() 方法
    2. 构造器:new String(StringBuffer sb)

四、Math 类 ​

  • 基本介绍:包含用于执行基本数学运算的静态方法。

  • 常用方法:

    • abs (绝对值)
    • pow (求幂)
    • ceil (向上取整)
    • floor (向下取整)
    • round (四舍五入)
    • sqrt (开平方)
    • random (随机数,范围 [0.0, 1.0))
    • max, min (求最值)

五、Arrays 类 ​

  • 基本介绍:包含一系列操作数组的静态方法。

  • 常用方法:

    • toString (返回数组字符串形式)
    • sort (排序,支持自然排序和定制排序——通过 Comparator 接口)
    • binarySearch (二分查找,数组必须有序)
    • copyOf (数组复制)
    • fill (数组填充)
    • equals (比较两数组内容)
    • asList (将一组值转为 List)

六、System、BigInteger、BigDecimal ​

1. System 类 ​

  • 常用方法:

    • exit (退出程序)
    • arraycopy (复制数组,底层高效)
    • currentTimeMillis (获取当前时间戳毫秒数)
    • gc (运行垃圾回收)

2. BigInteger ​

  • 应用场景:存储、运算超大整数 (超出 long 范围)。
  • 运算:使用对应方法,如 add, subtract, multiply, divide。

3. BigDecimal ​

  • 应用场景:存储、运算高精度浮点数,解决浮点数运算精度丢失问题。
  • 运算:使用对应方法。
  • 除法注意:可能抛出 ArithmeticException (无限循环小数),需指定精度 BigDecimal.ROUND_CEILING 等。

七、日期类 ​

1. 第一代:Date & SimpleDateFormat ​

  • Date:表示特定瞬间,精确到毫秒。大部分方法已过时。

  • SimpleDateFormat:用于格式化和解析日期。

    • 格式化:Date → String (format 方法)
    • 解析:String → Date (parse 方法,需处理异常)

2. 第二代:Calendar ​

  • 抽象类,用于字段操作 (YEAR, MONTH 等)。
  • 缺点:可变、偏移性 (月从0开始)、格式化不便、非线程安全。

3. 第三代 (JDK8):LocalDate, LocalTime, LocalDateTime ​

  • 核心类:不可变、线程安全、设计合理。

    • LocalDate:只含日期。
    • LocalTime:只含时间。
    • LocalDateTime:含日期和时间。
  • Instant:时间戳。

  • DateTimeFormatter:格式化类 (替代 SimpleDateFormat)。

  • 优点:方法丰富 (plusDays, minusHours 等),无偏移问题。