String s1=s1+"b"; s1没有被初始化分配空间
改 String s1="";
s1=s1+"b";

解决方案 »

  1.   

    public class mytest1{
      private String name="a";
      public mytest1(){
        //name="b";//这里注释和没注释差不多
      }
      public void catString(){
        name=name+"c";
        System.out.println(name);
      }
      public static void main(String[] args){
        mytest1 my=new mytest1();
        my.catString();
      }
    }
    我写的这个小程序就可用..........
    要是这样我就不了解到底什么是"不可改变"的意思了
      

  2.   

    改改第一行就可以了
    String s1= new String("a");  //edit by chy
    String s2=s1+"b";//可以
    String s1=s1+"b";//可以
      

  3.   

    呵呵,估计你那本书也是翻译过来的。他说不可改变指的是将String对象作为形式参数传递,
    不会改变它原来的值。
      

  4.   

    是的,,我看的两本书都是那么写,,,,一本是servle与jsp核心技术,,另一本是java语言导学都是翻译的,,,,可总觉得不是这个翻译问题...函数间调用默认的都是值传递..没必要再另外写一次,,,,所以我想不是这个问题主要是我看了两本书都这么写,而我在实际上又行像chy018(pillar)那样好像不用写第一行只要有定义这个变量就行...唉,还是搞不懂
      

  5.   

    “String---这个类用于处理由多个字符组成的不可改变的数据”这句话表示你不可以直接改变字符串中的内容,但是并不表示你不可以让它的引用指向另一个字符串。
    String s1=s1+"b";
    这个实际上是让s1指向另一个字符串了,两个字符串地址都不一样。
      

  6.   

    我是阿杀
    这个还是去问SUN的工程师比较好
      

  7.   

    举个简单的例子说吧
    String a="abc";
    String b=a.replace('a','c');
    它返回了一个新的String。
    而a本身并没有改变。
      

  8.   

    String s1="a";
    String s2=s1+"b";//可以
    //不行,你属于重复性定义了的,当然不可以了
    String s1=s1+"b";