字符串是不可变的?

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

}


侃侃无极
浏览 240回答 6
6回答

尚方宝剑之说

String 对象是不可变的,而变量 studentDetails不是。当您调用时 studentDetails += stu.getFirstName(),您创建了一个新String 对象并将其分配给变量 studentDetails

HUH函数

使用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());}String 是不可变的,studentDetails 不是一个单一的 String 对象吗不,因为每次用 附加两个Strings 时+=,都会创建一个新String的。

开满天机

字符串是不可变的 - 使用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());}

ABOUTYOU

是的,java中的字符串对象是不可变的。字符串中的任何更改都将创建新的字符串对象。而 stringBuilder 和 StringBuffer 是可变的

素胚勾勒不出你

是的,String对象是不可变的,这就是为什么需要使用StringBuilderor StringBuffer。以下是显示的步骤StringBuilder创建类型变量StringBuilder使用append()方法连接String调用toString()将其转换为String

largeQ

是的,字符串是不可变的,如果需要线程安全,只需使用 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");     }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java