String不可变:
String是不可变的,每当把String参数作为方法的参数时候,都会复制一份引用,而该引用所指的一个新的对象一直待在单一的物理位置上。
StringBuilder对象:
当你为一个类编写tiString()对象时候,如果字符串操作比较简单,那就可以信赖编译器,他会为你合理的构造最终的字符串结果。但是,如果你要在toString()方法中使用循环,那么最好自己创建一个StringBuilder对象,用它来构建最终的结果。
比如:
public class UsingStringBuilder { public Random rand = new Random(47); public String toString(){ //如果在toString()中使用了循环,那么要建立StringBuilder对象 StringBuilder sb = new StringBuilder("["); for(int i=0;i<25;i++){ sb.append(rand.nextInt(100)); sb.append(", "); } sb.delete(sb.length()-2, sb.length()); sb.append("]"); return sb.toString(); } public static void main(String[] args){ UsingStringBuilder usb = new UsingStringBuilder(); System.out.print(usb); } }
执行结果:
[58, 55, 93, 61, 61, 29, 68, 0, 22, 7, 88, 28, 51, 89, 9, 78, 98, 61, 20, 58, 16, 40, 11, 22, 4]
StringBuildr与StringBuffer:
StringBuilder是java SE5引入的,在这之前java用的是StringBuffer。StringBuffer是线程安全的,所以说开销也会大一些;在使用String中,编译器会自动引入java.lang.StringBuilder类,虽然我们在源代码中没有使用SringBuilder,但是编译器会自动主张的使用它,因为StringBuilder更加高效。
总而言之,StringBuilder是高效的,StringBuffer是线程安全的,但是开销比较到。
StringBuilder中经常弄到的方法:
insert()、relieace()、substring()、reverse()、append()、tostring()、delete()
ps:本博客参考自《java编程思想》