简明现代魔法 -> Java编程语言 -> Java字符串的不可变性
Java字符串的不可变性
2009-11-08
String 对象是不可变的。
看似修改了 String 对象的方法,实际上是创建了一个全新的 String 对象。最初的 String 是没有改变的。
程序代码
public class Immutable {
public static void main(String[] args){
// 原来的字符串
String str = "Hello NowaMagic";
System.out.println(str);
// 大写后的字符串
String strUpcase = upcase(str);
System.out.println(strUpcase);
// 原来的字符串
System.out.println(str);
}
static String upcase(String str){
return str.toUpperCase();
}
}
原来的 str 为 Hello NowaMagic
调用字符串大写转换方法之后,创建了全新的字符串对象 HELLO NOWAMAGIC
再输出原来的字符串对象,值仍然为 Hello NowaMagic
程序运行结果
Hello NowaMagic HELLO NOWAMAGIC Hello NowaMagic
把 str 传给 upcase 方法时,实际传递的只是 str 引用的一个 copy。而原来的引用则还是指向原来的字符串数据。
