您需要了解在Java中使用字符串的知识

一旦开始学习Java,String类将凭借其独特的属性吸引您的注意力。

您可以比其他语言更轻松地在Java中创建和操作字符串。这是因为String类提供了各种功能。

基于这些功能,有多种方法可以根据您的喜好和需求来生成和编辑字符串。同样,很多情况将取决于您的应用程序以及需要在何处使用字符串。

Java字符串有何不同?

如果您以前使用过C语言,则知道C中的字符串是一个char (字符)数组。另一方面,Java字符串是不可变的,并且包含Unicode字符。

串联是使Java中的字符串唯一的关键功能之一。只需使用加法运算符“ +”来连接两个或多个字符串。这是您无法使用其他Java对象(例如PointCircle)执行的操作

另外,如前所述,Java字符串是不可变的,即您不能对其进行修改。例如,诸如toUpperCase()toLowerCase()之类的方法会生成一个全新的字符串,而不是对现有字符串内容进行更改。现在,您的代码将返回此新生成的字符串。

相关:如何使用这些功能处理PHP中的文本

字符串不同的另一个方面是使用空字符来终止诸如C之类的语言中的字符串。在Java中,字符串是字符数组支持的对象。如果您希望以字符数组表示字符串的方式读取字符串的内容,则使用toCharArray()方法即可完成工作。

用Java比较字符串也比使用其他编程语言更方便。您可以使用equals()方法比较任何程序中使用的两个或多个字符串,而不是编写冗长的代码来比较字符串。这主要是因为,在Java中, equals方法被String类覆盖,这使得字符串比较成为小菜一碟。

同样,在Java的子字符串中搜索也很轻松。使用正则表达式或诸如lastIndexOf()indexOf()之类的方法时,您可以搜索字符串段并在识别出匹配项后返回值。您还可以使用正则表达式来修剪和分割不同的字符串,并将其单独用于任何程序中的广泛用途。

字符串如何存储在内存中?

既然您知道了什么使Java中的字符串与众不同并从中受益,让我们探索String类。如果您对Java的内存管理了解一两件事,那么您必须处理它的两个关键实体:堆和堆栈。

堆栈被Java程序调用后用于执行进程和操作,而堆存储有效运行和执行代码所需的内容。那么,对于字符串而言,内存管理又有何关系呢?

这是因为Java中的String类和字符串文字受到不同的对待。这表示在堆内存中为字符串文字分配了唯一的存储空间,称为“字符串常量池”。因此,每当您使用字符串文字在Java中创建字符串对象时,字符串常量池都会存储它们。

相反,当您使用new关键字创建字符串对象时,Java将像对待任何其他对象一样对待它们,并将它们发送到堆进行存储。

字符串文字示例

既然您已经足够了解字符串对象,那么让我们看一下字符串文字的示例:

 
public class muostrings {
public static void main(String args[])
{
String himuo = "Hello World from MUO";
System. out .println (himuo);
}
}

在这里,字符串文字创建了内容为“来自MUO的Hello World”的String对象。 Java将把该对象发送到字符串常量池。

使用新关键字

您还可以使用new关键字生成String对象。

内容为“来自MUO的Hello World”的字符串“ himuo”的字符串对象已经由字符串文字生成,并将被发送到字符串常量池。同样,也可以使用new关键字创建字符串对象,如下所示:

 
public class muostringsobj {
public static void main(String args[]) {
char [] strArr = { 'M', 'O', 'U'};
String jStr = new String(strArr);
System. out .println( jStr );
}
}

上面的示例使用new关键字创建一个字符串对象。如前所述,它们被发送到堆中,并与其他变量和对象一起存储,等待程序执行。

现在,您必须对字符串常量池感到好奇,这是正确的。它根据字符串对象的内容为对象分配池空间。字符串常量池接收对象后,将检查它们以验证两个对象是否包含完全相同的内容。

两个字符串对象可以存储相同的内容吗?

当使用字符串文字创建新对象时,Java虚拟机(JVM)会检查对象内容并评估其是否已存在于池中。当对象包含池中已经存在的内容时,将返回该对象的引用,而不创建新对象。如果必须创建新对象,则必须确保内容是唯一的。

但是,如果使用new关键字创建新字符串,则将以不同的方式对其进行处理。当您使用new关键字创建新字符串时,无论它是否包含与现有字符串相同的内容,都将生成它。

这表明允许存储在堆内存中的两个现有字符串对象包含相同的内容。这与存储在字符串常量池中的字符串对象不同。您也可以使用“ ==”运算符证明这一点;如果比较两个具有相同物理地址的对象,则返回true。

 
public class comparingStrngs {
public static void main(String[] args)
{
String firstLiteral = "muo1";
String secondLiteral = "muo1";
System. out .println(firstLiteral == secondLiteral);
String firstKeyword = new String("muo2");
String secondKeyword = new String("muo2");
System. out .println(firstKeyword == secondKeyword);
}
}

现在您可以轻松理解Java中的字符串

在本文中,您学习了Java中的字符串有何不同,如何使用Java中的字符串,如何使用Java中的字符串进行内存管理以及有关字符串如何工作的其他重要细节。为了测试您的理解,为什么不编写一个Java程序来连接两个字符串?