日期:2014-05-18  浏览次数:20678 次

java 引用变量基础问题,菜鸟中的菜鸟求教。 哎蛋都碎了。。。
java 中 stringbuilder 类;
[b]public class StringBuilderTest {
public static void main(String[] args) {

StringBuilder s1 = new StringBuilder("hello");
StringBuilder s2 = new StringBuilder("java");

show(s1,s2);
System.out.println(s1+"..........."+s2);

}

private static void show(StringBuilder s1, StringBuilder s2) {

s1.append(s2);
s1 = s2;[/b]

}
run 如下
hellojava...........java



s1 和  S2 这两个引用变量:s1=s2 后什么意思,指向同一地址吗,那sysout为什么是“hellojava”

------解决方案--------------------
s1=s2是s1地址与s2地址相同,但是方法里的s1跟main的s1是2个对象引用,所以值变了,里面地址引用变了外面没变
------解决方案--------------------
以我的理解就是:
方法的参数是一个临时变量,当方法退出的时候,这个临时变量也就销毁了。
你这样只是给一个临时变量赋一地址值。你想它改变要return回去。
------解决方案--------------------
private static void show(StringBuilder s1, StringBuilder s2) {
s1.append(s2);
s1 = s2;
}

个人拙见,此问题是引用传递
main中的s1(以下简称ms1),s2(以下简称ms2)各指向一块内存
调用show方法,传递的是ms1和ms2的引用,
Show方法中的s1(简称ss1)和ss2, 此时和ss1和ms1指向同一块内存,ss2和ms2同理 

调s1.append(s2);时,将ss1所指向的内存值进行修改,变为hellojava,也就是ms1指向的内存中值为
hellojava

调s1 = s2;时,ss1指身了ss2(此时也可以说是MS2)那块内存

所以在调用完show方法之后,ms1指向的值变为hellojava,ms2指向的值为Java
所以输出hellojava...........java

ps:大小写问题请见谅,输入法不给力
------解决方案--------------------
楼主,估计你把实例变量和局部变量的核心思想不清楚。 
private static void show(StringBuilder s1, StringBuilder s2) {
s1.append(s2);   //这里执行完很显然 s1=hellojava,s2=java
s1 = s2;     //这里执行完 s1=java  s2=java(但注意s1,s2这2个变量是参数执行完会销毁掉)
//如果在这里面添加输入输出,则应该显示 s1=java  s2=java
System.out.println(s1+",,,,,,,"+s2)
}
但引用变量s1的值从没变过,改变的只是参数s1的值。  大体就是这样了