public class PassS{  public static void main (String [] args) {
  PassS p = new PassS();
  p.start();
  }
 
void start(){
  String s1 = "slip";
  String s2 = fix(s1);
  System.out.println(s1+" "+s2);
 } String fix (String s1){
  s1 = s1 + "stream";
  System.out.print(s1 + " ");
  return "stream";
 }
}---------
上段代码的输出 ,和原因???

解决方案 »

  1.   

    输出没有问题啊!
    void   start(){ 
      String   s1   =   "slip"; 
      String   s2   =   fix(s1); //这里先输出fix(s1)方法里的s1=s1+"stream"; 就是s1="slip"+"stream"+" " 不换行,再把方法返回的"stream"赋给s2.
      System.out.println(s1+"   "+s2); //这里输出s1="slip" 再空格,再s2,就是stream.
      }
      

  2.   

    slipstream stream  stream s1   =   s1   +   "stream";  // 此时s1 = slipstream, 但此数值无法影响main里面的s1,因为String是不能修改的,此方法的s1 与main里面的s1虽然一开始指向了同一个地址,但这里他们指向了不同的地址了!所以main里面的s1依然是 slip.  System.out.print(s1   +   "   "); 
    return "stream"; // 此字符串将传递个s2提示:String由于不能修改,所以导致问题产生。
    对于普通的可修改类,此处的任何修改都将影响到原始对象,因为他们指向了同一个对象地址