Java 字符串、包装类与日期处理:开发中最常用的技术点解析

摘要

本文围绕 Java 开发中最常用的三类基础技术展开:字符串处理、包装类与日期时间处理。重点讲解 StringStringBuilderStringBuffer 的区别与适用场景,分析 IntegerDouble 等包装类的自动装箱、自动拆箱与缓存机制,并结合 JDK 8 之后的日期时间 API,说明如何更规范地完成日期解析、格式化与计算。文中配有结构图、流程图和运行效果图,帮助你建立清晰的知识体系。


第三章:实用进阶类

标题:Java 字符串、包装类与日期处理:开发中最常用的技术点解析

一、本章目标

本章主要解决开发中三类高频问题:

  1. 字符串拼接、截取、替换、格式化等常见操作
  2. 包装类与基本类型之间的转换问题
  3. 日期时间的解析、格式化、比较与计算问题

通过本章内容,你能够理解 Java 基础项目中大量 API 设计背后的原因,也能写出更规范、更易维护的业务代码。


二、字符串处理

字符串是 Java 开发中最常见的操作对象之一。无论是接收用户输入、处理数据库字段、拼接日志,还是生成业务报文,都离不开字符串处理。

1. String 的基本使用

String 是 Java 中表示字符串的核心类。它的常用方法包括:

表格

方法作用
equals()比较字符串内容是否相等
length()获取字符串长度
substring()截取子串
indexOf()查找字符或子串位置
replace()替换字符或子串
split()按指定规则分割字符串
trim()去除首尾空格
toUpperCase()转为大写
toLowerCase()转为小写

示例代码如下:

java

运行

public class StringDemo {
    public static void main(String[] args) {
        // 定义原始字符串
        String original = "  Hello, Java String  ";

        // 去除首尾空格
        String trimmed = original.trim();
        System.out.println("去除空格后:" + trimmed);

        // 转为大写
        String upper = trimmed.toUpperCase();
        System.out.println("大写形式:" + upper);

        // 截取子串
        String sub = trimmed.substring(7);
        System.out.println("截取结果:" + sub);

        // 替换内容
        String replaced = trimmed.replace("Java", "Java 基础");
        System.out.println("替换后:" + replaced);
    }
}

运行效果:

text

去除空格后:Hello, Java String
大写形式:HELLO, JAVA STRING
截取结果:Java String
替换后:Hello, Java 基础 String
2. String、StringBuilder、StringBuffer 的区别

在 Java 中,字符串拼接常见有三种方式:

  1. String
  2. StringBuilder
  3. StringBuffer

它们的主要区别如下:

表格

可变性线程安全性能适用场景
String不可变安全拼接效率低少量字符串操作
StringBuilder可变不安全单线程下频繁拼接
StringBuffer可变安全较低多线程下频繁拼接

String 的不可变性意味着每次拼接都会创建新的字符串对象。如果在循环中大量拼接字符串,会产生较多临时对象,影响性能。

示例代码:

java

运行

public class StringPerformanceDemo {
    public static void main(String[] args) {
        // 使用 String 拼接,每次都会创建新对象
        String str = "";
        for (int i = 0; i < 5; i++) {
            str += i;
        }
        System.out.println("String 拼接结果:" + str);

        // 使用 StringBuilder 拼接,适合频繁修改
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 5; i++) {
            sb.append(i);
        }
        System.out.println("StringBuilder 拼接结果:" + sb.toString());
    }
}

运行效果:

text

String 拼接结果:01234
StringBuilder 拼接结果:01234

三、包装类

Java 提供了 8 种基本数据类型:byteshortintlongfloatdoublecharboolean

但很多时候,我们需要将基本类型作为对象使用,例如:

  • 存入集合
  • 参与泛型运算
  • 调用对象相关方法
  • 接收可能为 null 的数值

这时就需要使用包装类。

1. 八种包装类

表格

基本类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
2. 自动装箱与自动拆箱

自动装箱指的是基本类型自动转换为包装类对象。

自动拆箱指的是包装类对象自动转换为基本类型。

示例代码:

java

运行

public class WrapperDemo {
    public static void main(String[] args) {
        // 自动装箱:int 转为 Integer
        Integer num = 100;

        // 自动拆箱:Integer 转为 int
        int value = num;

        System.out.println("num:" + num);
        System.out.println("value:" + value);
    }
}

运行效果:

text

num:100
value:100

3. Integer 的缓存机制

Integer 提供了一个缓存数组,默认缓存 -128127 之间的整数。

这意味着在这个范围内,Integer 对象会复用已有对象;超出这个范围,则会创建新的对象。

示例代码:

java

运行

public class IntegerCacheDemo {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;

        Integer c = 200;
        Integer d = 200;

        System.out.println("a == b:" + (a == b));
        System.out.println("c == d:" + (c == d));
    }
}

运行效果:

text

a == b:true
c == d:false

原因是:

  • 100 在缓存范围内,所以 ab 指向同一个对象
  • 200 超出缓存范围,所以 cd 是两个不同的对象


四、日期时间处理

日期时间处理也是 Java 开发中的高频场景。常见需求包括:

  • 获取当前时间
  • 日期格式化
  • 字符串转日期
  • 日期比较
  • 日期加减
  • 计算两个日期之间的天数
1. JDK 8 之前的日期处理

JDK 8 之前主要使用 java.util.Datejava.text.SimpleDateFormat

示例代码:

java

运行

import java.util.Date;
import java.text.SimpleDateFormat;

public class OldDateDemo {
    public static void main(String[] args) {
        // 获取当前日期时间
        Date now = new Date();
        System.out.println("当前时间:" + now);

        // 定义格式化pattern
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 日期转为字符串
        String dateStr = sdf.format(now);
        System.out.println("格式化后:" + dateStr);
    }
}

运行效果:

text

当前时间:Wed Jun 05 14:30:00 CST 2024
格式化后:2024-06-05 14:30:00

2. JDK 8 之后的日期处理

JDK 8 之后提供了更清晰、更线程安全的日期时间 API,常用类包括:

表格

作用
LocalDate表示日期,不包含时间
LocalTime表示时间,不包含日期
LocalDateTime表示日期和时间
DateTimeFormatter用于格式化和解析日期
Duration计算时间间隔
Period计算日期间隔

示例代码:

java

运行

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class NewDateDemo {
    public static void main(String[] args) {
        // 获取当前日期时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println("当前时间:" + now);

        // 定义格式化器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 日期时间转为字符串
        String formatted = now.format(formatter);
        System.out.println("格式化后:" + formatted);
    }
}

运行效果:

text

当前时间:2024-06-05T14:30:00
格式化后:2024-06-05 14:30:00

3. 日期解析与格式化

在实际开发中,经常需要把前端或数据库中的时间字符串转换为日期对象。

示例代码:

java

运行

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class DateParseDemo {
    public static void main(String[] args) {
        // 日期字符串
        String dateStr = "2024-06-05";

        // 定义日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        // 字符串解析为 LocalDate
        LocalDate date = LocalDate.parse(dateStr, formatter);

        System.out.println("解析后的日期:" + date);
        System.out.println("年份:" + date.getYear());
        System.out.println("月份:" + date.getMonthValue());
        System.out.println("日期:" + date.getDayOfMonth());
    }
}

运行效果:

text

解析后的日期:2024-06-05
年份:2024
月份:6
日期:5

五、本章小结

本章主要学习了三类 Java 基础开发中非常常用的内容:

  1. 字符串处理:掌握 StringStringBuilderStringBuffer 的区别,能根据场景选择合适的字符串处理方式。
  2. 包装类:理解基本类型与包装类的转换关系,掌握自动装箱、自动拆箱和 Integer 缓存机制。
  3. 日期时间处理:了解 JDK 8 前后日期 API 的区别,能够使用 LocalDateTimeDateTimeFormatter 完成常见日期格式化与解析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值