API 全称是应用程序编程接口,简单理解就是 Java 官方提前封装好的类与方法,开发者可直接调用实现功能。本章重点讲解开发使用频率最高的String字符串类与StringBuilder字符串缓冲区,包含底层特点、构造方法、全套成员方法、经典案例与内存分析,语法 + 实战结合,适合零基础学习、面试复习。

一、API 概述

API 就是 Java 官方提供的现成类和方法,我们无需从零编写底层逻辑,直接调用即可完成业务。前期已经接触过Scanner(键盘录入)、Random(随机数),本章学习字符串两大核心类:StringStringBuilder

二、String 类

2.1 字符串应用场景

字符串是程序中最常用的数据类型,账号密码、文本内容、弹幕、聊天信息、手机号等业务场景,都离不开字符串操作。

2.2 String 类核心特点

  1. Java 中所有双引号包裹的内容,都是 String 类对象
  2. 字符串内容一旦创建,不可修改
  3. 字符串可以被多个引用变量共享。

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 字符串内容比较方法

==比较地址,比较字符串内容必须使用专用方法

  1. public boolean equals(String str):区分大小写,完全一致才返回true
  2. public boolean equalsIgnoreCase(String str):忽略大小写比较。

代码示例(模拟登录案例):

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 字符串遍历相关方法

  1. public int length():获取字符串长度;
  2. public char charAt(int index):根据索引获取单个字符;
  3. public char[] toCharArray():将字符串转为字符数组。

实战案例:统计大写、小写、数字字符数量

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 字符串截取方法

  1. public String substring(int beginIndex):从指定索引截取到字符串末尾;
  2. public String substring(int beginIndex, int endIndex):截取指定区间,包头不包尾(包含起始索引,不包含结束索引)

实战案例:手机号屏蔽(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() 字符串切割

小结

  1. String 字符串内容不可变,所有修改操作都会生成新字符串;
  2. 常量池共享地址,new对象、变量拼接都会产生新地址;
  3. 比较内容优先使用equals,禁止直接用==
  4. 掌握截取、替换、遍历、切割四大常用方法,应对业务开发。

三、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:判断回文字符串

需求:键盘录入字符串,判断是否为对称回文(如123321abcba

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 拼接内存原理

  1. String 拼接:每一次+拼接,都会在堆中创建新String对象,频繁拼接内存开销大;
  2. StringBuilder 拼接:全程只使用一个缓冲区对象,原地修改内容,不产生额外对象,效率极高。

小结

  1. String:内容不可变,适合少量字符串定义、内容对比;
  2. StringBuilder:内容可变,高频拼接、反转场景首选
  3. 两类可通过toString()实现互相转换;
  4. 核心方法:append()拼接、reverse()反转、length()获取长度。

四、全文总结

java运行

  1. API 概念:Java 官方封装好的类与方法,直接调用即可实现功能;
  2. String 类
    • 特性:内容不可变,常量池共享,new/ 变量拼接产生新地址;
    • 核心方法:比较、遍历、截取、替换、切割,业务文本处理必备;
    • 区分:==比地址,equals比内容;
  3. StringBuilder 类
    • 定位:可变字符串缓冲区,解决 String 拼接低效问题;
    • 核心方法:append拼接、reverse反转、toString转字符串;
  4. 选型建议:少量文本使用String,频繁拼接、动态修改优先使用StringBuilder

StringStringBuilder是 Java 开发、面试高频考点,建议多练习各类方法案例,吃透内存区别与使用场景。

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐