API 全称是应用程序编程接口,简单理解就是 Java 官方提前封装好的类与方法,开发者可直接调用实现功能。本章重点讲解开发使用频率最高的String字符串类与StringBuilder字符串缓冲区,包含底层特点、构造方法、全套成员方法、经典案例与内存分析,语法 + 实战结合,适合零基础学习、面试复习。
一、API 概述
API 就是 Java 官方提供的现成类和方法,我们无需从零编写底层逻辑,直接调用即可完成业务。前期已经接触过Scanner(键盘录入)、Random(随机数),本章学习字符串两大核心类:String、StringBuilder。
二、String 类
2.1 字符串应用场景
字符串是程序中最常用的数据类型,账号密码、文本内容、弹幕、聊天信息、手机号等业务场景,都离不开字符串操作。
2.2 String 类核心特点
2.3 String 常用构造方法
| public String() | 创建一个空白字符串,无任何字符 |
| public String(String original) | 根据传入字符串,创建新字符串对象 |
| public String(char[] chs) | 根据字符数组,创建字符串对象 |
代码演示:
public class StringCreate {
public static void main(String[] args) {
// 1. 空参构造
String s1 = new String();
// 2. 传入字符串构造
String s2 = new String("Java");
// 3. 字符数组转字符串
char[] arr = {'a','b','c'};
String s3 = new String(arr);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
2.4 字符串内存与 == 判断(高频面试点)
==对于引用类型,比较的是内存地址,结合字符串常量池分四种场景讲解:
场景 1:直接赋值常量
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // 结果:true
解析:双引号常量会存入字符串常量池,池内数据共享,两个变量指向同一地址。
场景 2:new 关键字创建对象
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2); // 结果:false
解析:new会在堆内存开辟新空间,s1指向常量池,s2指向堆对象,地址不同。
场景 3:变量拼接字符串
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
System.out.println(s1 == s3); // 结果:false
解析:变量拼接底层会使用StringBuilder,最终生成新堆对象,和常量池地址不一致。
场景 4:纯常量拼接
String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2); // 结果:true
解析:编译器会做常量优化,直接合并为"abc",复用常量池地址。
2.5 字符串内容比较方法
==比较地址,比较字符串内容必须使用专用方法:
代码示例(模拟登录案例):
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
// 预设正确账号密码
String userName = "admin";
String pwd = "123456";
Scanner sc = new Scanner(System.in);
int count = 3; // 登录次数
while (count > 0) {
System.out.println("请输入用户名:");
String inputUser = sc.next();
System.out.println("请输入密码:");
String inputPwd = sc.next();
if (userName.equals(inputUser) && pwd.equals(inputPwd)) {
System.out.println("登录成功!");
break;
} else {
count–;
System.out.println("账号或密码错误,剩余次数:" + count);
}
}
}
}
2.6 字符串遍历相关方法
实战案例:统计大写、小写、数字字符数量
import java.util.Scanner;
public class CountChar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.next();
int upper = 0; // 大写
int lower = 0; // 小写
int number = 0; // 数字
char[] chArr = str.toCharArray();
for (char ch : chArr) {
if (ch >= 'A' && ch <= 'Z') {
upper++;
} else if (ch >= 'a' && ch <= 'z') {
lower++;
} else if (ch >= '0' && ch <= '9') {
number++;
}
}
System.out.println("大写字母:" + upper);
System.out.println("小写字母:" + lower);
System.out.println("数字:" + number);
}
}
2.7 字符串截取方法
实战案例:手机号屏蔽(156****1234)
import java.util.Scanner;
public class PhoneHide {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号:");
String phone = sc.next();
// 截取前3位 + 拼接**** + 截取后4位
String start = phone.substring(0,3);
String end = phone.substring(7);
String result = start + "****" + end;
System.out.println("屏蔽后:" + result);
}
}
2.8 字符串替换方法
方法:public String replace(旧字符串, 新字符串)作用:替换字符串内容,原字符串不变,返回新字符串。
实战案例:敏感词过滤
import java.util.Scanner;
public class ReplaceDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入聊天内容:");
String content = sc.nextLine();
// 替换敏感词 TMD 为 ***
String newContent = content.replace("TMD", "***");
System.out.println("过滤后:" + newContent);
}
}
2.9 字符串切割方法
方法:public String[] split(String regex)作用:按照指定规则切割字符串,结果存入字符串数组。
2.10 String 常用方法汇总
| equals() | 区分大小写比较内容 |
| equalsIgnoreCase() | 忽略大小写比较内容 |
| length() | 获取字符串长度 |
| charAt() | 根据索引取字符 |
| toCharArray() | 字符串转字符数组 |
| substring() | 截取字符串 |
| replace() | 字符串替换 |
| split() | 字符串切割 |
小结
三、StringBuilder 类
3.1 为什么需要 StringBuilder
String内容不可变,频繁拼接字符串会不断产生新对象,内存占用高、执行效率低。StringBuilder是可变字符串缓冲区,字符内容可动态修改,专门用于高频字符串拼接场景,性能远优于String。
3.2 StringBuilder 构造方法
| public StringBuilder() | 创建空字符串缓冲区 |
| public StringBuilder(String str) | 传入字符串,初始化缓冲区内容 |
3.3 核心常用方法
| append(任意类型) | 追加数据,返回自身对象(拼接首选) |
| reverse() | 反转缓冲区字符内容 |
| length() | 获取字符长度 |
| toString() | 转为普通String对象(互转核心方法) |
3.4 方法基础演示
public class StringBuilderBase {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
// 拼接内容
sb.append("Java").append(123).append(true);
System.out.println("拼接后:" + sb);
// 反转
sb.reverse();
System.out.println("反转后:" + sb);
// 转为String
String str = sb.toString();
System.out.println("转为字符串:" + str);
}
}
3.5 案例 1:判断回文字符串
需求:键盘录入字符串,判断是否为对称回文(如123321、abcba)
import java.util.Scanner;
public class Palindrome {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.next();
// 借助StringBuilder反转对比
StringBuilder sb = new StringBuilder(str);
String reverseStr = sb.reverse().toString();
if (str.equals(reverseStr)) {
System.out.println("是回文字符串");
} else {
System.out.println("不是回文字符串");
}
}
}
3.6 案例 2:数组转指定格式字符串
需求:将int[] arr = {1,2,3} 拼接为 [1, 2, 3] 格式
public class ArrayJoin {
public static void main(String[] args) {
int[] arr = {1,2,3};
String result = arrayToString(arr);
System.out.println(result);
}
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length – 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
return sb.toString();
}
}
3.7 String 与 StringBuilder 拼接内存原理
小结
四、全文总结
java运行
- 特性:内容不可变,常量池共享,new/ 变量拼接产生新地址;
- 核心方法:比较、遍历、截取、替换、切割,业务文本处理必备;
- 区分:==比地址,equals比内容;
- 定位:可变字符串缓冲区,解决 String 拼接低效问题;
- 核心方法:append拼接、reverse反转、toString转字符串;
String和StringBuilder是 Java 开发、面试高频考点,建议多练习各类方法案例,吃透内存区别与使用场景。



