分享

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

 凤舞天煌 2007-11-12

⊙ 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对象的值

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多