Java 字符串

17 Mar 2025 | 4 分钟阅读

Java 中,字符串本质上是一个表示字符序列的对象。字符 数组 的工作方式与 Java 字符串相同。例如

与...相同

Java String 类提供了许多方法来执行字符串操作,例如 compare()、concat()、equals()、split()、length()、replace()、compareTo()、intern()、substring() 等。

java.lang.String 类实现了 SerializableComparableCharSequence 接口

String in Java

CharSequence 接口

CharSequence 接口用于表示字符序列。String、StringBufferStringBuilder 类实现了它。这意味着我们可以使用这三个类在 Java 中创建字符串。

CharSequence in Java

Java 字符串是不可变的,这意味着它不能被更改。每当我们更改任何字符串时,都会创建一个新实例。对于可变字符串,可以使用 StringBuffer 和 StringBuilder 类。

我们稍后会讨论不可变字符串。让我们先了解一下 Java 中的 String 是什么以及如何创建 String 对象。

Java 中的 String 是什么?

通常,字符串是字符的序列。但在 Java 中,字符串是一个表示字符序列的对象。java.lang.String 类用于创建字符串对象。

如何创建字符串对象?

有两种方法可以创建 String 对象

  1. 通过字符串字面量
  2. 通过 new 关键字

1) 字符串字面量

Java 字符串字面量是通过双引号创建的。例如

每次创建字符串字面量时,JVM 首先会检查“字符串常量池”。如果字符串已存在于池中,则返回指向池中实例的引用。如果字符串不存在于池中,则创建一个新的字符串实例并将其放入池中。例如


Java String

在上面的例子中,只会创建一个对象。首先,JVM 将在字符串常量池中找不到值为“Welcome”的字符串对象,因此它将创建一个新对象。之后,它会在池中找到值为“Welcome”的字符串,它不会创建新对象,而是返回指向同一实例的引用。

注意:字符串对象存储在一个特殊的内存区域,称为“字符串常量池”。

为什么 Java 使用字符串字面量的概念?

为了使 Java 更节省内存(因为如果字符串已存在于字符串常量池中,则不会创建新对象)。

2) 通过 new 关键字

在这种情况下,JVM 将在普通(非池)堆内存中创建一个新的字符串对象,并且字面量“Welcome”将被放入字符串常量池中。变量 s 将指向堆中的对象(非池)。

Java 字符串示例

StringExample.java

立即测试

输出

java
strings
example

上面的代码将一个 char 数组转换为 String 对象。并使用 println() 方法在控制台上显示 String 对象 s1、s2s3

Java String 类方法

java.lang.String 类提供了许多有用的方法来执行字符序列操作。

编号。方法描述
1char charAt(int index)它返回特定索引处的 char 值
2int length()它返回字符串长度
3static String format(String format, Object... args)它返回一个格式化的字符串。
4static String format(Locale l, String format, Object... args)它使用给定的 locale 返回格式化的字符串。
5String substring(int beginIndex)它返回给定起始索引的子字符串。
6String substring(int beginIndex, int endIndex)它返回给定起始索引和结束索引的子字符串。
7boolean contains(CharSequence s)它在匹配字符序列后返回 true 或 false。
8static String join(CharSequence delimiter, CharSequence... elements)它返回一个连接的字符串。
9static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)它返回一个连接的字符串。
10boolean equals(Object another)它检查字符串与给定对象的相等性。
11boolean isEmpty()它检查字符串是否为空。
12String concat(String str)它连接指定的字符串。
13String replace(char old, char new)它替换指定 char 值的所有出现。
14String replace(CharSequence old, CharSequence new)它替换指定的 CharSequence 的所有出现。
15static String equalsIgnoreCase(String another)它比较另一个字符串。它不区分大小写。
16String[] split(String regex)它返回一个与正则表达式匹配的分割字符串。
17String[] split(String regex, int limit)它返回一个与正则表达式和限制匹配的分割字符串。
18String intern()它返回一个已驻留的字符串。
19int indexOf(int ch)它返回指定 char 值索引。
20int indexOf(int ch, int fromIndex)它返回从给定索引开始的指定 char 值索引。
21int indexOf(String substring)它返回指定的子字符串索引。
22int indexOf(String substring, int fromIndex)它返回从给定索引开始的指定子字符串索引。
23String toLowerCase()它以小写形式返回字符串。
24String toLowerCase(Locale l)它使用指定的 locale 以小写形式返回字符串。
25String toUpperCase()它以大写形式返回字符串。
26String toUpperCase(Locale l)它使用指定的 locale 以大写形式返回字符串。
27String trim()它删除此字符串开头和结尾的空格。
28static String valueOf(int value)它将给定类型转换为字符串。它是一个重载方法。

你知道吗?
  • 为什么 String 对象是不可变的?
  • 如何创建不可变类?
  • 什么是字符串常量池?
  • 当您使用 +(字符串连接运算符)连接任何字符串时,编译器会写入什么代码?
  • StringBuffer 和 StringBuilder 类之间有什么区别?

我们将在字符串处理中学习什么?
  • 字符串的概念
  • 不可变字符串
  • 字符串比较
  • 字符串连接
  • 子字符串的概念
  • String 类方法及其用法
  • StringBuffer 类
  • StringBuilder 类
  • 创建不可变类
  • toString() 方法
  • StringTokenizer 类

下一主题不可变字符串