String类对象的内容一但被初始化就不可以被改变。那么:
String s = "test";
s = "uses";
这不是就被改变了吗?我的想法有问题求高手帮我解答!

解决方案 »

  1.   

    "test"这个对象本身并没有被改变,只是s这个引用指向了另一个对象!
      

  2.   

    String的不可变性是指:
    在String对象池中具体的String对象一经new出后就不能改变了,但是指向该串的引用仍然可以指向池中其它地方,也就是说值为final的,但引用还是活的. 
      

  3.   

    String的问题真是好多啊 哎String s = "test";
    String s1 = s;
    s = "uses"; System.out.println(s1);
      

  4.   

    那这么说int a = 5;
    int b = a;
    a = 6;
    那么int也是一但初始化也不可以改变喽?
      

  5.   


    有String的地方就有猴子....
      

  6.   

    引用和对象楼主还没区分开哦
    String s = "test";
    s是引用 "test"是对象
    "test"被初始化后是不能被改变了
    但是s是个引用变量,指向同类型的对象都可以而int那个是改变变量的内容
      

  7.   

    String s = "test"; 申明一个引用类型变量s,同时将"test"这个对象赋值给s
    s = "uses"; 将"uses"这个对象赋值给s
    string的对象是不可变的比如:"uses"和"test"这两个对象是不可变的,它们储存在池中!
    s只是一个string类型的引用型变量!
      

  8.   

    test在常量池中还是存在的并且不会改变 只不过s这个引用没有指向它 知道程序结束才释放所在内存空间
      

  9.   

    对,“test”所占的内存空间里的值不能不能被改变,但是引用是活的。
      

  10.   

    int 是基本类型 String 是引用类型
    所以不同...
      

  11.   

    好象懂了.大家看我理解的对不...
    String 是引用类型指向对象,而int是基本类型,没有什么引用.
    "test"和"use"是2个String类型的对象..s只是指向他堆内存中的引用..在堆中test和use是没有改变的只是s改变了指向。。
    而int类型没有所谓的引用,只是改变了值而已..
      

  12.   

    s指向变了,String s = "test"; S指向的test
                     s = "uses"; S指向的uses
      

  13.   


    刚画了个图看懂了,s一开始指向test。后来s1也指向了test,当s指向uses的时候,s1还是指向test的.对吗?
      

  14.   

    楼上的解释都对。
    在内存中基本类型和引用存放在栈区,对象存放在堆区。要牢记。
    String s = "test"; 
    s = "uses";
    s是引用,test和uses是对象。
    所以s放栈区,test和uses放堆区。
    int是基本类型,存放在栈区,值不能改变。为了给你解释清楚,我花了心思哦,楼主可要有良心哦!呵呵