为了账号安全,请及时绑定邮箱和手机立即绑定

字符串是不可变的?

字符串是不可变的?

侃侃无极 2022-12-21 10:06:01
只是有一个问题,我们如何重写上面的代码,以便只创建一个 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 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

String 对象是不可变的,而变量 studentDetails不是。

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


查看完整回答
反对 回复 2022-12-21
?
HUH函数

TA贡献1836条经验 获得超4个赞

使用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的。


查看完整回答
反对 回复 2022-12-21
?
开满天机

TA贡献1786条经验 获得超12个赞

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

}


查看完整回答
反对 回复 2022-12-21
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

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



查看完整回答
反对 回复 2022-12-21
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

是的,String对象是不可变的,这就是为什么需要使用StringBuilderor StringBuffer。以下是显示的步骤StringBuilder

  • 创建类型变量StringBuilder

  • 使用append()方法连接String

  • 调用toString()将其转换为String


查看完整回答
反对 回复 2022-12-21
?
largeQ

TA贡献2039条经验 获得超7个赞

是的,字符串是不可变的,如果需要线程安全,只需使用 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");  

   }


查看完整回答
反对 回复 2022-12-21
  • 6 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信