日期:2014-05-20  浏览次数:20710 次

问个String的问题,大家帮我解答一下
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”没有加上去。

为什么输出的字符串还是原来的那个呢?请大家仔细的给我解答一下,谢谢

------解决方案--------------------
这就是String的不变性,a += "World ";会产生一个新的对像.而且马上会变成垃圾.
变量a还是原来的Hello
------解决方案--------------------
public static link(String a){
a += "World ";
System.out.println(a)

}
这样输出就是hello world了
------解决方案--------------------
可以通过编译??不敢相信呀!!连返回值都没有?真不知道是不是能通过/
可能是我学艺不精吧!我就先看到了这一点。
------解决方案--------------------
学习
------解决方案--------------------
mark
------解决方案--------------------
public static String link(String a){
return a+ "World "
}
System.out.println(link(a));

------解决方案--------------------
月经贴。。。。
------解决方案--------------------
首先你在link方法中并没用直接输出 字符串a,或者讲方法link定义为一个返回整形int类型的方法并用return来返回,你的确在link方法中修改了a但是主函数中的a还是hello
所以没有输出你想要的结果
------解决方案--------------------
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
------解决方案--------------------
基本类型只修改副本,不修改变量,对象类型不修改引用,只修改引用的对象
------解决方案--------------------
这样的问题,GOOGLE一下或者搜索下CSDN以前的帖子多的是,就知道问