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”
[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”
方法的参数是一个临时变量,当方法退出的时候,这个临时变量也就销毁了。
你这样只是给一个临时变量赋一地址值。你想它改变要return回去。
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:大小写问题请见谅,输入法不给力
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的值。 大体就是这样了
改变值只是改变show方法里面定义的对象的值,而不是传进来的对象的值。
show方法中s1和s2是局部变量
s1.append(s2);会使得s1所引用的对象变成hellojava
s1=s2;s1和s2只是两个引用有同时指向java这个对象
show方法执行完了后局部变量s1,s2都被回收(不是主函数中的变量);
main方法执行system.out.println时,s1引用对象hellojava,而s2引用对象时java;
只是个人理解,仅供参考!