Java 字符串存储
字符串是Java中的一个类,它用于存储一系列字符。这些字符实际上是String类型的对象。字符串的值被双引号包围。字符串类位于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 = “教程”; 那么,
但是,如果我们将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程序检查了具有相同值的两个引用变量是否指向同一个对象。