关于String对象在创建之后不能改动的理解

来源:百度文库 编辑:神马文学网 时间:2024/04/28 20:35:39
⊙ String 是一个字符串类,在创建之后是不能改动的!如果想改变字符串,可以用StringBuilder 或者 StringBuffer !
⊙ String类是不可变(final)的,对String类的任何改变,都是返回一个新的String类对象.这样的话把String类的引用传递给一个方法,改方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似.
String s1,s2;
s1 = "abc";
s2 = s1;   //对于一个对象(String对象除外),这里会产生一个“别名现象”,即s2 ,s1中任何一个           //的改变都会引起另一个的改变
s2 = "def";
//这样操作之后s1还是abc,s2是def.
因此,我们可以把String类的不可变性理解成:String类就象基本类型一样,不会产生别名现象!
⊙ 假如有一语句: String s = "abc";
然后再用一语句:s = "def";   //既然String对象是不可变的,此处为什么不会报错?
---》此处,我们只是把引用s指向另一个String对象(“def”),而原来的"abc"仍然在堆栈中,我们可以把 String 对象理解成一个 基本类型的变量,对变量赋值以后,我们仍可以改变变量所指向的值,就象:int i = 5; i = 6 ;
⊙ 对于String类中的方法,每一个看起来都会修改值,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。比如 :
String q = "howdy";
System.out.println(q); //howdy
System.out.println(q.toUpperCase()); //HOWDY
System.out.println(q);   //此处的输出仍然是howdy,因为方法的调用不会影响原来String对象的值