为什么在 Java 中使用循环时要小心字符串连接 (+) 运算符?
字符串用于在 Java 中存储一系列字符,它们被视为对象。java.lang 包的 String 类表示一个字符串。
您可以使用 new 关键字(像任何其他对象一样)或通过为字面量赋值(像任何其他原始数据类型一样)来创建一个字符串。
Public class Sample{
Public static void main(String args[]){
String str1 = "Hello";
String str2 = "how are you";
}
}Java 中的字符串是不可变的,也就是说,一旦创建了字符串字面量,就不能修改它。
存储
由于我们定义的所有字符串值都是 String 类的对象,因此它们存储在堆区域。但是,与其他对象在单独的内存位置不同,为字符串对象分配了一个称为字符串常量池的单独内存位置。
每当你定义一个字符串值时,JVM 都会在字符串常量池中创建一个具有给定值的字符串对象。因此,如果你运行上面的程序,将在字符串常量池中创建两个字符串值。

两个字符串的连接
如果你尝试连接这两个字符串值,如下所示:
str1 = str2 + str2;
由于 Java 中的字符串是不可变的,因此不会修改 str1,而是会创建一个新的(中间)字符串对象,其中包含连接后的值,并将其赋值给引用 str1。

如果你在循环中连接字符串,则每次迭代都会在字符串常量池中创建一个新的中间对象。这不推荐,因为它会导致内存问题。因此,不推荐如下例所示在循环中连接字符串。
示例
public class StringExample {
public static void main(String args[]) {
String stringArray[] = {"Java", "JavaFX", "HBase", "Oracle"};
String singleString = new String();
for (int i=0; i<stringArray.length; i++) {
singleString = singleString+stringArray[i]+" ";
}
System.out.println(singleString);
}
}输出
Java JavaFX HBase Oracle
示例
如果你需要在循环中添加字符串值,建议使用 StringBuilder 而不是 String:
public class StringExample {
public static void main(String args[]) {
String stringArray[] = {"Java", "JavaFX", "HBase", "Oracle"};
StringBuilder singleString = new StringBuilder();
for (int i=0; i<stringArray.length; i++) {
singleString.append(stringArray[i]);
singleString.append(" ");
}
System.out.println(singleString);
}
}输出
Java JavaFX HBase Oracle
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP