字符串是不可变的?

时间:2019-05-29 12:22:32

标签: java string

对此有一个问题,我们如何重写上面的代码,以便仅创建一个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);
}

6 个答案:

答案 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)

字符串是不可变的-改用StringBuilderStringBuffer

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对象是不可变的,这就是为什么需要使用StringBuilderStringBuffer的原因。以下是显示适用于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是可变的