对此有一个问题,我们如何重写上面的代码,以便仅创建一个String对象?
字符串是不可变的,不是studentDetails已经是一个String对象
public void displayString(Student[] students)
{
String studentDetails = "";
for (Student stu : students)
{
studentDetails += stu.getFirstName();
studentDetails += " ";
studentDetails += stu.getLastName();
studentDetails += " ";
studentDetails += stu.getAge();
studentDetails += "\n";
}
System.out.println("Student Details are: ");
System.out.println(studentDetails);
}
答案 0 :(得分:5)
String
对象是不可变的,而变量 studentDetails
则不是。
调用studentDetails += stu.getFirstName()
时,您创建了一个新的String
对象,并将其分配给变量 studentDetails
答案 1 :(得分:3)
使用StringBuilder
:
public void displayString(Student[] students)
{
StringBuilder studentDetails = new StringBuilder();
for (Student stu : students)
{
studentDetails.append(stu.getFirstName());
studentDetails.append(' ');
studentDetails.append(stu.getLastName());
studentDetails.append(' ');
studentDetails.append(stu.getAge());
studentDetails.append('\n');
}
System.out.println("Student Details are: ");
System.out.println(studentDetails.toString());
}
字符串是不可变的,不是studentDetails已经是一个String对象
否,因为每次您在两个String
后面加上+=
,都会创建一个新的String
。
答案 2 :(得分:1)
字符串是不可变的-改用StringBuilder
或StringBuffer
public void displayString(Student[] students)
{
StringBuilder studentDetails = new StringBuilder();
for (Student stu : students)
{
studentDetails.append(stu.getFirstName());
studentDetails.append(" ");
studentDetails.append(stu.getLastName());
studentDetails.append(" ");
studentDetails.append(stu.getAge());
studentDetails.append("\n");
}
System.out.println("Student Details are: ");
System.out.println(studentDetails.toString());
}
答案 3 :(得分:0)
是的,String
对象是不可变的,这就是为什么需要使用StringBuilder
或StringBuffer
的原因。以下是显示适用于StringBuilder
StringBuilder
的变量append()
方法连接String
toString()
将其转换为String
答案 4 :(得分:0)
是的,字符串是不可变的,如果需要线程安全,请使用StringBuilder或stringBuffer。...
StringBuilder studentDetails = "";
for (Student stu : students)
{
studentDetails.append(stu.getFirstName());
studentDetails.append(" ");
studentDetails.append(stu.getLastName());
studentDetails.append(" ");
studentDetails.append(stu.getAge());
studentDetails.append("\n");
}
答案 5 :(得分:0)
是,java中的字符串对象是不可变的。 字符串中的任何更改都将创建新的字符串对象。 而stringBuilder和StringBuffer是可变的