String类对象的内容一旦初始化就不能改变,知道这个理论是正确的,但是就是想不到错误的例子,请问有那位高手能将错误的例子举出来,让小弟学习学习.

解决方案 »

  1.   

    String类对象的内容一旦初始化就不能改变为什么不可以改变?
      

  2.   

    String 内部对应好多 final 的变量,所以其内容是不能修改的。任何的该变,都会指向一个新的字符串。如果要改变,应该用StringBuilder / StringBuffer
      

  3.   

    public class Test{
        public static void main(String args[]){
            String s1="abc";
            String s2=s1.concat("def");
            String s3=s1.toUpperCase();
            System.out.pringln("s2=="+s2);
            System.out.println("s3=="+s3);
            System.out.println("s1=="+s1);
        }
    }结果
    s2==abcdef
    s3==ABC
    s1==abc
    concat为和并字符串
    toUpperCase()查英语字典!
    这样你应该理解了吧!自己动动脑我不多解释了,这样印象才深!~
      

  4.   

    ///final 的变量.应该明白吧?常量怎么会改变呢
      

  5.   

    楼主,说实话我没有搞懂你问的啥子意思!
    猜测你是想问。为什么String类不能改变,如果是问的这个问题,上面的人回答得都不算完整,其实是下面的答案:
    1、因为SUN公司在设计之初是这样设计的,把String尽量偏向于基础数据,国为其使用量与基础数据类似,都用+等,当你对基础数据操作以后,会得到新的结果,但是被操作的数据本身却没有变化,例如:int a ,b,c  c=a+b; 这样以后a,b没有变化
    2、基于以上信息你就能了解JDK 里面String的设计用意,不难理解jdk里面的String类型根本就没有设计提供更改此对象的方法,这一点你可以参看jdk原码不是String不能被更改,其实是因为sun公司设计的String类没有提供更收的方法,其实我们自己也可以定义这样的类
      

  6.   

    string的引用是一个指向类(特殊结构体)实例首地址的指针
    而该结构体的内存模型在初始化时已经固定 若试图改变该值 将改变指针的地址(若已存在于常量池则直接传地址若常量池无此对象则实例化该对象压栈后传地址给引用)而非指向的对象
              String对象一旦初始化就不能改变
    这个很明确的写在API文档里了对象没有变,变的是引用只要搞清楚
    什么是对象,什么是引用
    什么是引用类型,什么是基本类型
    就不难理解 
      

  7.   

    String s = "Hello";
    s = s + " world!";
    s 所指向的对象是否改变了呢?从本系列第一篇的结论很容易导出这个结论。我们来看看发生了什么事情。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。
      

  8.   

    我是想找个错误的列子来证明"String类对象的内容一旦初始化就不能改变"这个结论是正确的.
      

  9.   

    你知道创建一个字符串产生了几个对象么?????String只是一个指针...指向一个String池....你所谓的对象是池里的内容,而池里的东西我们是无法操作的,JAVA是禁止内存操作的...所以..无法满足你的需求