Pixiv - KiraraShss
1420 字
7 分钟
常用类
一、包装类 (Wrapper Class)
1. 基本介绍
- 目的:为八种基本数据类型提供对应的引用类型,使其具有类的特性(如调用方法)。

-
分类:
- Boolean, Character (继承关系特殊)
- Byte, Short, Integer, Long, Float, Double (均继承自 Number 类)
2. 装箱与拆箱
-
装箱:基本类型 → 包装类型。
-
拆箱:包装类型 → 基本类型。
-
JDK5前后:
- JDK5前:手动 (new Integer() / intValue() )。
- JDK5后:自动(编译器完成,底层调用 valueOf() 和 xxxValue())。
3. 与String类型的转换
-
包装类 → String:
- Integer i = 100; String str1 = i + “”;
- String str2 = i.toString();
- String str3 = String.valueOf(i);
-
String → 包装类:
- Integer i1 = Integer.parseInt(“123”); (返回 int,可自动装箱)
- 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. 创建对象的两种方式与内存分配
-
直接赋值:String s = “hsp”;
- 先从常量池查找是否有 ”hsp”,有则直接指向;无则创建后指向。
- s 指向常量池地址。
-
调用构造器: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. 三者对比
| 特性 | String | StringBuffer | StringBuilder |
|---|---|---|---|
| 可变性 | 不可变 (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:
- 构造器:new StringBuffer(String str)
- append:new StringBuffer().append(str)
-
StringBuffer/StringBuilder → String:
- toString() 方法
- 构造器: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 等),无偏移问题。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!