public class TestString{
public static link(String a){
a += "World";}
public static void main(String[] args){
String a = "Hello";
link(a);
System.out.println(a);
}
}
最后显示是Hello; 不是已经调用了link了吗?为什么“world”没有加上去。为什么输出的字符串还是原来的那个呢?请大家仔细的给我解答一下,谢谢

解决方案 »

  1.   

    这就是String的不变性,a += "World";会产生一个新的对像.而且马上会变成垃圾.
    变量a还是原来的Hello
      

  2.   

    public static link(String a){
    a += "World";
    System.out.println(a)}
    这样输出就是hello world了
      

  3.   

    String不是int这样的基本对象,在java中是按值传参数的
    你调用link函数相当于
    String a = "Hello";
    String b = a;
    b += "World";
    也就是说它把“Hello”传进去了(是值!),而不是把a传进去
    所以a未被修改
      

  4.   

    public void link(String a){
      a+=" World";
    }
      

  5.   

    public static String link(String a){
    return a+"World"
    }
    System.out.println(link(a));
      

  6.   

    首先你在link方法中并没用直接输出 字符串a,或者讲方法link定义为一个返回整形int类型的方法并用return来返回,你的确在link方法中修改了a但是主函数中的a还是hello
    所以没有输出你想要的结果
      

  7.   

    public class TestString{
    public static link(String a){
    a += "World";}
    public static void main(String[] args){
    String a = "Hello";
    link(a);
    System.out.println(a);
    }
    }LZ 先从主函数main 入手。定义一个string形的a,并且赋值“Hello”。调用like方法,将a传递给link(String a)方法。(其实这个问题的重点是参数传递,参数传递的实质是对象副本的传递,也就说你将a传递给了like()方法,虽然在此方法中将a+="World",但a的实质没有发生任何改变,也就是说a的副本发生了改变,而a的本身没有发生任何改变).如果是这样的话 a就会发生改变(我简单举个例子):
    public class TestString{
    public static link(char a[]){
    char[0]='w';
    }
    public static void main(String[] args){
    char a[] ={'h','e'}
    link(a[]);
    System.out.println(a);
    }
    }
    输出的将是 we,而不是he
      

  8.   

    这样的问题,GOOGLE一下或者搜索下CSDN以前的帖子多的是,就知道问