Java 中字符串的存储
javaobject oriented programmingprogramming更新于 2024/5/30 19:56:17
字符串是 Java 中存储一系列字符的类。这些字符实际上是字符串类型的对象。字符串的值括在双引号中。字符串类在 java.lang 包中可用。
在本文中,我们将研究 Java 中字符串的存储机制。
字符串和字符串的存储
创建字符串 −
语法
String nameOfobject = " values ";
实例 1
String st1 = "Tutorix and Tutorialspoint";
这里,"st1"是引用变量,其值用双引号引起来。
我们还可以使用 new 关键字来创建新字符串 −
语法
String nameOfobject = new String(" values ");
实例 2
String st2 = new String("You are here at Tutorialspoint");
此处,"st2"是使用 new 关键字创建的引用变量。
从字符数组创建字符串 −
实例 3
char chs[] = { 'T', 'U', 'T', 'O', 'R', 'I', 'X' };
String st3 = new String(chs);
在上面的例子中,我们创建了字符数组"chs",并使用 new 关键字将它们作为参数传递给字符串"st3"。
到目前为止,我们已经讨论了什么是字符串以及如何以多种方式创建字符串。现在,让我们了解它是如何存储在内存中的。
字符串池
Java 中的字符串存储与其他编程语言不同。我们都知道引用变量存储在堆栈中,而它们的值存储在堆中。字符串的情况也是如此,引用变量存储在堆栈中,但它们的对象以及给定的值存储在字符串池中,字符串池是堆内的一个单独内存空间。
当我们创建一个字符串类型的对象时,它会存储在堆的字符串池中。此时,字符串池是在堆中创建的。现在,每当我们创建一个具有相同值或不具有相同值的新字符串时,JVM 都会检查给定的值是否已在字符串池中可用。如果不可用,则为该引用变量创建新值,但在相反情况下,JVM 不会重新创建具有给定值的新对象,而只是将旧值指向该引用变量。
示例
假设我们正在创建一个字符串对象,如下所示 -
String st4 = "Tutorix";
然后,它将存储在字符串池中 -
当我们创建一个新的 String 对象时 -
String st5 = "Tutorials";然后,
但是,如果我们将 st5 初始化为"Tutorix",则 JVM 不会为其创建新对象。它将旧值指向"st5"。
用于检查字符串存储的程序
我们可以使用比较运算符"=="检查两个引用变量是否指向同一个对象。当两个对象引用指向同一个实例时,它返回 true,否则返回 false。
示例 1
在此示例中,我们将声明并初始化两个具有相同值的字符串变量"st1"和"st2"。然后,我们将使用 == 运算符检查它们是否指向同一个对象。结果将存储在布尔变量"isSame"中。
public class Main {
public static void main(String[] args) {
String st1 = "Tutorix";
String st2 = "Tutorix";
boolean isSame = (st1 == st2);
System.out.print(isSame);
}
}
输出
true
示例 2
在此示例中,我们将使用 new 关键字创建两个字符串对象。当我们使用 new 关键字时,JVM 会创建一个新对象,而不管给定对象的值如何。换句话说,无论值是否相同,JVM 都会为给定的引用变量创建一个新对象。
public class Main {
public static void main(String[] args) {
String st1 = new String("Tutorix");
String st2 = new String("Tutorix");
boolean isSame = (st1 == st2);
System.out.print(isSame);
}
}
输出
false
在上面的代码中,我们使用 new 关键字创建了两个字符串,并再次使用 == 运算符检查它们是否指向同一个对象。结果为 false,表示两者都指向不同的对象。
结论
在本文中,我们了解了字符串以及它们如何存储在内存中。此外,我们还通过 Java 程序检查了两个具有相同值的引用变量是否指向同一个对象。
相关文章
在 Java 中计算 n 中至少有一位数字与 n 相同的除数
Java 中二叉树奇数位置和偶数位置节点之和的差异
Java 中二叉树奇数层和偶数层节点之和的差异
奇数和偶数之和的差异。
前 n 个自然数的平方和与和的平方之间的差异。
Java 中数组中最大和最小素数之间的差异
Java 中的 EnumMap 类
在 Java 中比较两个字符串
在 Java 中比较日期
Java 中的流
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.w3schools.cn/java/
打印
下一节:Java 中的字符串数组 ❯❮ 上一节:在 LinkedList 中插入节点的 Java 程序