Java 中的字符串
Java 中的字符串是由字符数组在内部支持的对象。因为数组是不可变的(不能增长),所以字符串也是不可变的。每当对字符串进行更改时,就会创建一个全新的字符串。
语法:
<String_Type> <string_variable> = "<sequence_of_string>";
示例:
String str = "Geeks";
字符串的内存分配
每当字符串对象被创建为文字时,该对象将在字符串常量池中创建。这允许 JVM 优化字符串文字的初始化。
例如:
String str = "Geeks";
也可以使用新的运算符声明字符串,即动态分配。在字符串被动态分配的情况下,它们在堆中被分配一个新的内存位置。此字符串不会添加到字符串常量池中。
例如:
String str = new String("Geeks");
如果你想把这个字符串存储在常量池中,那么你需要“实习”它。
例如:
String internedString = str.intern();
// this will add the string to string constant pool.
最好使用字符串文字,因为它允许 JVM 优化内存分配。
一个演示如何声明字符串的例子
Java 语言(一种计算机语言,尤用于创建网站)
// Java code to illustrate String
import java.io.*;
import java.lang.*;
class Test {
public static void main(String[] args)
{
// Declare String without using new operator
String s = "GeeksforGeeks";
// Prints the String.
System.out.println("String s = " + s);
// Declare String using new operator
String s1 = new String("GeeksforGeeks");
// Prints the String.
System.out.println("String s1 = " + s1);
}
}
Output:
String s = GeeksforGeeks
String s1 = GeeksforGeeks
Java 中字符串形式的接口和类
- CharBuffer :这个类实现了 CharSequence 接口。这个类用于允许字符缓冲区代替字符序列。这种用法的一个例子是正则表达式包“T2”
- 字符串:字符串是一个字符序列。在 java 中,String 的对象是不可变的,这意味着一个常量,一旦创建就不能更改。
创建字符串
- 用 Java 创建字符串有两种方法:
- 字符串文字
String s = “GeeksforGeeks”;
- 使用 新增 关键词
String s = new String (“GeeksforGeeks”);
- StringBuffer: StringBuffer是 String 的对等类,提供了字符串的大部分功能。该字符串表示固定长度、不可变的字符序列,而 StringBuffer 表示可增长和可写的字符序列。 语法:
StringBuffer s = new StringBuffer("GeeksforGeeks");
- 字符串构建器: Java 中的字符串构建器代表一个可变的字符序列。因为 Java 中的字符串类创建了一个不可变的字符序列,所以 StringBuilder 类提供了字符串类的替代,因为它创建了一个可变的字符序列。 语法:
StringBuilder str = new StringBuilder();
str.append("GFG");
- StringTokenizer: Java 中的 StringTokenizer 类是用来把一个字符串分解成令牌的。 例:
-
StringTokenizer 对象在内部维护要标记化的字符串中的当前位置。某些操作会将当前位置推进到已处理的字符之外。通过获取用于创建 StringTokenizer 对象的字符串的子字符串来返回标记。
-
StringJoiner: StringJoiner 是 java.util 包中的一个类,用于构造由分隔符分隔的字符(字符串)序列,可选地以提供的前缀开始,以提供的后缀结束。虽然这也可以在 StringBuilder 类的帮助下在每个字符串后添加分隔符,但是 StringJoiner 提供了一种简单的方法来实现这一点,而无需编写太多代码。 语法:
公共字符串分隔符
上面我们看到我们可以通过字符串文字创建字符串。
对于 ex- // String s= "欢迎";
在这里,JVM 检查字符串常量池。如果字符串不存在,则会创建一个新的字符串实例并将其放入池中。如果该字符串存在,则它不会创建新的对象。相反,它将返回对同一实例的引用。存储这些字符串实例的缓存称为字符串常量池或字符串池。在早期版本的 Java 中,直到 JDK 6,字符串池都位于永久生成空间中。但是在 JDK 7 中,它被移动到主堆区域。
为什么弦池从 PermGen 移到正常堆区?
PermGen 空间有限,默认大小仅为 64 MB。在 PermGen 空间中创建和存储太多字符串对象是一个问题。这就是为什么字符串池被移动到更大的堆区域。为了让 Java 更有内存效率,使用了字符串文字的概念。通过使用“new”关键字,JVM 将在正常堆区域中创建一个新的字符串对象,即使字符串池中存在相同的字符串对象。
对于前任
字符串 a =新字符串(“布巴内斯瓦尔”)
让我们看一下 java 程序的概念,并可视化实际的 JVM 内存结构:
程序:
Java 语言(一种计算机语言,尤用于创建网站)
class StringStorage {
public static void main(String args[])
{
String s1 = "TAT";
String s2 = "TAT";
String s3 = new String("TAT");
String s4 = new String("TAT");
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
}
}
Output
TAT
TAT
TAT
TAT
注意:Java 中的所有对象都存储在一个堆中。引用变量是指存储在堆栈区域中的对象,或者它们可以包含在其他对象中,这也将它们放在堆区域中。
版权属于:月萌API www.moonapi.com,转载请注明出处