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...........javas1 和  S2 这两个引用变量:s1=s2 后什么意思,指向同一地址吗,那sysout为什么是“hellojava”

解决方案 »

  1.   

    hellojava” 是因为s1后面追加了s2的内容:s1.append(s2);
      

  2.   

    但append 后面不是有句S1 = S2 吗, 这句怎么理解?
      

  3.   

    s1=s2是s1地址与s2地址相同,但是方法里的s1跟main的s1是2个对象引用,所以值变了,里面地址引用变了外面没变
      

  4.   

    以我的理解就是:
    方法的参数是一个临时变量,当方法退出的时候,这个临时变量也就销毁了。
    你这样只是给一个临时变量赋一地址值。你想它改变要return回去。
      

  5.   

    这是一个赋值语句。之所以没有打印出java…………………………Java是因为你的show()是static而变量不是static的
      

  6.   

    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...........javaps:大小写问题请见谅,输入法不给力
      

  7.   

    楼主,估计你把实例变量和局部变量的核心思想不清楚。 
    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的值。  大体就是这样了
      

  8.   

    传的是对象的引用,show里面所有的操作只有直接操作对象的引用才会改变传进来对象。
    改变值只是改变show方法里面定义的对象的值,而不是传进来的对象的值。
      

  9.   

    我觉得是:
    show方法中s1和s2是局部变量
    s1.append(s2);会使得s1所引用的对象变成hellojava
    s1=s2;s1和s2只是两个引用有同时指向java这个对象
    show方法执行完了后局部变量s1,s2都被回收(不是主函数中的变量);
    main方法执行system.out.println时,s1引用对象hellojava,而s2引用对象时java;
    只是个人理解,仅供参考!