∮♂举剑问天的回答:String str1 = "myString"; String str2 = "myString"; str1和str2 具有相同的指针 也就是 内存中只有一个myString 如果 改变str1的值 并不会改变myString内存的值 会在内存中重新划分一块区域来存储新的字符串 同时改变str1的指针 StringBuilder则不一样 当你new一个StringBuilder时就会划分一块内存给StringBuilder 实例使用 append或Remove等函数来实现拼接和删除字符串 例: String getRosterReport() { StringBuilder buffer = new StringBuilder(); buffer.append(ROSTER_REPORT_HEADER); Student student = students.get(0); buffer.append(student.getName()); buffer.append('\n'); student = students.get(1); buffer.append(student.getName()); buffer.append('\n'); buffer.append(ROSTER_REPORT_FOOTER + students.size() + '\n'); return buffer.toString(); } ∮♂举剑问天的回答:String str1 = "myString"; String str2 = "myString"; str1和str2 具有相同的指针 也就是 内存中只有一个myString 如果 改变str1的值 并不会改变myString内存的值 会在内存中重新划分一块区域来存储新的字符串 同时改变str1的指针 StringBuilder则不一样 当你new一个StringBuilder时就会划分一块内存给StringBuilder 实例使用 Append或Remove等函数来实现拼接和删除字符串 例: String getRosterReport() { StringBuilder buffer = new StringBuilder(); buffer.append(ROSTER_REPORT_HEADER); Student student = students.get(0); buffer.append(student.getName()); buffer.append('\n'); student = students.get(1); buffer.append(student.getName()); buffer.append('\n'); buffer.append(ROSTER_REPORT_FOOTER + students.size() + '\n'); return buffer.toString(); } 妖璇的回答:StringBuilder采用了线程同步机制,是线性安全的 但是效率稍微要低 兰草的回答:java里有stringbuilder么? C#里的stringbuilder的作用是重复修改的字符串 Element㊣的回答:String对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能。如要把一系列的字符串拼起来可以使用 StringBuffer sb=new StringBuffer(); sb.append("我").append("是").append("一只小鸟"); 这样拼起来的话可以减少系统资源的开销,提高代码的质量! 一般我们如果需要把一些字符串拼接起来的话都尽量使用这个类,详细的方法可以看一下JDK的帮助! |