在Java中, 字符串是字符序列。例如, “ hello”是一个包含字符 ‘h’ , ‘e’ , ‘l’ , ‘l’和‘o’的序列的字符串 。
与其他编程语言不同,Java中的字符串不是原始类型(例如int
, char
等)。相反,所有字符串都是名为String
的预定义类的对象。例如,
// create a string
String type = "java programming";
在这里,我们创建了一个名为type的字符串 。在这里,我们使用“ java programming”初始化了字符串 。在Java中,我们使用双引号表示一个字符串。
该字符串是String
类的一个实例。
注意 :所有字符串变量都是String
类的实例。
Java字符串方法
Java String
提供了各种方法,使我们可以执行不同的字符串操作。以下是一些常用的字符串方法。
Methods | Description |
---|---|
concat() |
joins the two strings together |
equals() |
compares the value of two strings |
charAt() |
returns the character present in the specified location |
getBytes() |
converts the string to an array of bytes |
indexOf() |
returns the position of the specified character in the string |
length() |
returns the size of the specified string |
replace() |
replaces the specified old character with the specified new character |
substring() |
returns the substring of the string |
split() |
breaks the string into an array of strings |
toLowerCase() |
converts the string to lowercase |
toUpperCase() |
converts the string to uppercase |
valueOf() |
returns the string representation of the specified data |
让我们举几个例子。
示例1:Java查找字符串的长度
class Main {
public static void main(String[] args) {
// create a string
String greet = "Hello! World";
System.out.println("The string is: " + greet);
//checks the string length
System.out.println("The length of the string: " + greet.length());
}
}
输出
The string is: Hello! World
The length of the string: 12
在上面的示例中,我们创建了一个名为greet的字符串 。在这里,我们使用length()
方法来获取字符串的大小。
示例2:Java使用concat()连接两个字符串
class Main {
public static void main(String[] args) {
// create string
String greet = "Hello! ";
System.out.println("First String: " + greet);
String name = "World";
System.out.println("Second String: " + name);
// join two strings
String joinedString = greet.concat(name);
System.out.println("Joined String: " + joinedString);
}
}
输出
First String: Hello!
Second String: World
Joined String: Hello! World
在上面的示例中,我们创建了2个名为greet和name的 字符串 。
在这里,我们使用了concat()
方法来连接字符串。因此,我们得到一个名为joinedString的新字符串 。
在Java中,我们还可以使用+
运算符连接两个字符串 。
示例3:使用+ 运算符的 Java连接字符串
class Main {
public static void main(String[] args) {
// create string
String greet = "Hello! ";
System.out.println("First String: " + greet);
String name = "World";
System.out.println("Second String: " + name);
// join two strings
String joinedString = greet + name;
System.out.println("Joined String: " + joinedString);
}
}
输出
First String: Hello!
Second String: World
Joined String: Hello! World
在这里,我们使用+
运算符将两个字符串。
示例4:Java比较两个字符串
class Main {
public static void main(String[] args) {
// create strings
String first = "java programming";
String second = "java programming";
String third = "python programming";
// compare first and second strings
boolean result1 = first.equals(second);
System.out.println("Strings first and second are equal: " + result1);
//compare first and third strings
boolean result2 = first.equals(third);
System.out.println("Strings first and third are equal: " + result2);
}
}
输出
Strings first and second are equal: true
Strings first and third are equal: false
在上面的示例中,我们使用了equals()
方法比较两个字符串的值。
如果两个字符串相同,则该方法返回true
,否则返回false
。
注意 :我们还可以使用==
运算符和compareTo()
方法在2个字符串之间进行比较。
示例5:Java从字符串获取字符
class Main {
public static void main(String[] args) {
// create string using the string literal
String greet = "Hello! World";
System.out.println("The string is: " + greet);
// returns the character at 3
System.out.println("The character at 3: " + greet.charAt(3));
// returns the character at 7
System.out.println("The character at 7: " + greet.charAt(7));
}
}
输出
The string is: Hello! World
The character at 3: l
The character at 7: W
在上面的示例中,我们使用charAt()
方法从指定位置访问字符 。
示例6:Java Strings其他方法
class Main {
public static void main(String[] args) {
// create string using the new keyword
String example = new String("Hello! World");
// returns the substring World
System.out.println("Using the subString(): " + example.substring(7));
// converts the string to lowercase
System.out.println("Using the toLowerCase(): " + example.toLowerCase());
// converts the string to uppercase
System.out.println("Using the toUpperCase(): " + example.toUpperCase());
// replaces the character '!' with 'o'
System.out.println("Using the replace(): " + example.replace('!', 'o'));
}
}
输出
Using the subString(): World
Using the toLowerCase(): hello! world
Using the toUpperCase(): HELLO! WORLD
Using the replace(): Helloo World
在上面的示例中,我们使用new
关键字创建了一个名为example的字符串 。
这里,
substring()
方法返回字符串 WorldtoLowerCase()
方法将字符串转换为小写toUpperCase()
方法将字符串转换为大写replace()
方法替换字符 “!”带‘o’ 。
字符串的转义字符
Java中的字符串用双引号表示。例如,
// create a string
String example = "This is a string";
现在,如果我们想在字符串包含双引号 。例如,
// include double quote
String example = "This is the "String" class";
这将导致错误。这是因为使用双引号来表示字符串。因此,编译器会将“ This is”视为字符串。
为了解决此问题,在Java中使用了转义字符 \
。现在我们可以在字符串包含双引号 :
// use the escape character
String example = "This is the \"String\" class.";
转义字符告诉编译器转义双引号并读取整个文本。
Java字符串是不可变的
在Java中,创建字符串意味着创建String
类的对象。创建字符串,我们无法在Java中更改该字符串 。这就是为什么在Java中将字符串称为不可变的原因。
为了更深入地理解它,让我们考虑一个示例:
// create a string
String example = "Hello!";
在这里,我们创建了一个字符串对象"Hello!"
。创建之后,我们将无法更改它。
现在假设我们要更改字符串。
// adds another string to the string
example = example.concat(" World");
在这里,我们尝试将新字符串添加到先前的字符串。
由于字符串是不可变的 ,因此应导致错误。但这很好。
现在看来我们可以更改字符串了。但是,事实并非如此。让我们看看这里实际发生了什么。
我们有一个字符串 “ Hello!”。 ,由名为example的变量引用。现在,在执行上面的代码时,
- JVM接受字符串 “ Hello!”。
- 附加字符串 “世界”
- 这将创建一个新字符串 “ Hello!World”
- 变量示例现在引用了新字符串
- 上一个字符串 “ Hello!”保持不变
注意 :每次创建新字符串并由变量引用它时。
使用new关键字创建字符串
到目前为止,我们已经在Java中创建了类似于基本类型的字符串 。但是,由于Java中的字符串是对象,因此我们也可以使用new
关键字进行创建。例如,
// create a string using the new keyword
String name = new String("java string");
在上面的示例中,我们使用了new
关键字以及构造函数String()
来创建一个字符串。
String
类提供了其他各种构造函数来创建字符串。要了解所有这些构造函数,请访问Java String(Java官方文档)。
现在,让我们看一下创建字符串的过程与上一个过程有何不同。
使用字符串字面量和new关键字之间的区别
现在我们知道如何字符串使用字符串 字面量和创建new
关键字,让我们来看看它们之间有什么主要区别。
在Java中,JVM维护一个字符串池以将其所有字符串存储在内存中。 字符串池有助于重用字符串 。
使用字符串 字面量创建字符串 ,将直接提供字符串的值。因此,编译器首先检查字符串池以查看字符串已经存在。
- 如果字符串已经存在 ,则不会创建新字符串 。而是,新引用指向现有的字符串。
- 如果字符串不存在 ,则创建新字符串 。
但是,在使用new
关键字创建字符串 ,不会直接提供字符串的值。因此,新字符串始终被创建。