public class X 
 {
 public static void main (String[]args) 
 {
 String s1 = new String("Hello");
 modify(s);
 System.out.println(s);
 }
 
 public static void modify (String s) 
 {
s += "World";
 }  
 }
输出结果为什么为Hello?

解决方案 »

  1.   

    public class X 
     {
     public static void main (String[]args) 
     {
     String s1 = new String("Hello");
     modify(s);     //s在哪里?  这代码估计直接编译不过,
     System.out.println(s);
     }
     
     public static void modify (String s) 
     {
    s += "World";
     }  
     }
    输出结果为什么为Hello?
      

  2.   

    谢wuqing,那么如果想让结果为HelloWorld 该如何传值呢?回复aaa2003bf:笔误,变量是s。
      

  3.   

    估计是想问为什么传进去的对象没有被更改,哈哈
    在java中
    传String 时会拷贝一个String 进去!!所以没被更改
      

  4.   

    用String无论如何都不行!!改其它的对象吧
    如用StringBuffer啊!数组之类都可以
      

  5.   

    public class X 
     {
     public static void main (String[]args) 
     {
     StringBuffer s1 = new StringBuffer("Hello");
     modify(s1);
     System.out.println(s1.toString());
     }
     
     public static void modify (StringBuffer s) 
     {
    s .append( "World");
     }  
     }
      

  6.   

    这个代码是手工敲上来的吗?你这个好像完全运行不起来吧。。
    modify(s);System.out.println(s);这个s变量从何而来呢。就算改为s1调用modify(s1);也毫无意义吧,对s1变量毫无影响。如果是在想输出helloworld,就让modify返回字符串,给s1重新赋值。或者
    static String s1 = new String("Hello");
    public static void main (String[]args) 
     {
     
     modify(s1);
     System.out.println(s1);
     }
     
     public static void modify (String s) 
     {
    s1 = s+ "World";
     }
      

  7.   

    或者可以改方法:
    public class X 
     {
     public static void main (String[]args) 
     {
     String s1 = new String("Hello");
     s1 = modify(s1);
     System.out.println(s1);
     }
     
     public static String modify (String s) 
     {
    s += "World";
                      return s;
     }  
     }
      

  8.   

    谢谢blliy,但是能不能告诉我为什么用String无论如何都不行呢?
      

  9.   

    public class X 
     {
     public static void main (String[]args) 
     {
     String s1 = new String("Hello"); //1.这里s1是指向这个new String.
     modify(s1); //2.这里传递s1的引用.通过这个函数的调用s = s1; s这个时候也是指向这个s1.即Hello.
     System.out.println(s1);  //4.所以这里输出的仍然是Hello.
     }
     public static void modify (String s)  
     {
     s += "World"; //3.这里s又指向了hello world. 但是s1还是指向原来的Hello.
     } 
     }
    不知道你看懂了没有呢?或者是看点C的指针会好点,你认为呢?
      

  10.   

    你找找字符串常量池的概念.
    这就是STRING的不变性啊.SCJP的重要内容之一.
      

  11.   

    public class X 
     {
     public static void main (String[]args) 
     {
     String s1 = new String("Hello");
     s1=modify(s1);
     System.out.println(s1);
     }
     
     public static  String modify (String s1) 
     {
    s1 += "World";return s1;
     } 
     }
      

  12.   

    java对String不变性是这么定的,不是我要这么说,而是java就是这么做,我估计他是希望String能够想基本类型那样使用引用,所以使其不变!!当然我的想法不一定对,不过你先记住引用String时是拷贝一个String副本,而不是把本身的指向该String的指针传进去.
      

  13.   

    还有一点你也可以反过来想想!!对于重载运算符这一概念在java中现在还未有吧!!
    但对String类型却可以运用+号操作,所以String在java中要特殊一些