1. 不可变字符串,String对象本质上是不可变得,而String类中的修改字符串方法,都是在原有字符串加上修改的内容创建一个新的字符串,原有的可以说是丝毫未动
public class Immutable {
public static String upcase(String s){
return s.toUpperCase();
}
/**
* <b>方法说明:</b>
* <ul>
*
* </ul>
* @param args
*/
public static void main(String[] args) {
String m = "dsf";
System.out.println(m);
String qq = upcase(m);
System.out.println(qq);
System.out.println(m);
}
}
// console
dsf
DSF
dsf
就像上面的例子一样,把m传递给upcase()方法时,实际上传递的是一个引用的拷贝,(就是每次把Stirng对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直呆在单一的物理位置上)
2. 重载“+” 和 StringBuilder
String对象是不可以变得,可以为其加上任意多的别名,因为String对象具有只读特性,所以只向它的引用都不可能改变它的值。
不可变性会带来一定的效率问题,例如为String对象重载的"+"操作符就一个例子(重载:一个操作符在应用于特定的类时,被赋予了特殊的意义(+,+=是java仅有的两个重载过的操作符))
操作符“+”可用来连接String:
StringBuilder提供了全面丰富的方法,包括insert()、repleace()、substring()、reverse()、append() 等。这是jdk5引入的,之前使用的是StringBuffer,后者是线程安全的因此开销也会大一些;