s2 += s-->s2=s2+s-->s2和s都需要初始化,因为为s = in.readLine()因此只要s2初始化就可以了

解决方案 »

  1.   

    因为你这个语句有问题:String s2,s = new String();
    JAVA是个严谨的语言,跟VB不一样,你这样写的话只是初始化了s,而s2并没有被初始化。
    String s2 = null;
    String s = null;
      

  2.   

    String s2,s = new String();
    相当于声明String s2;
              String s=new String();
    在java rules这书里String s2,s = new String();这种做法是不提倡的
      

  3.   

    需要这样的考虑的!你的s2 += s + "\n";本身其中还涉及到一个原始的s2的值的问题,肯定需要
    但是你的String s2,s = new String(); 只是定义一个存储的空间,根本不能替代原始的初值但是你的s 由于 是s = in.readLine())的那么只需要一个空间就可以那所以编译会认为你的s2没有初始化!
      

  4.   

    String s2,s = new String();不能这样偷懒
      

  5.   

    java里重要的一点:局部变量必须在始用前初始化。编译的提示是s2“可能”没有初始化,也就是说while条件不一定成立,那么打印s2当然就不行了。
    但,s却不同,它在使用前是初始化了的。
      

  6.   

    String s2,s = new String();
    这样是申明了s2和s,但是只初始化了s
    String s,s2 = new String();
    这样是申明了s和s2,但是只初始化了s2
    String s,s2=new String();不等同于String s=new String();String s2=new String();
      

  7.   

    s2+=s+"\n" 即s2=s2+s+"\n" 表达式中存在没有初始化的变量s2