黑马程序员技术交流社区
标题:
关于StringBuffer问题
[打印本页]
作者:
xiaoxiaofeng
时间:
2014-8-22 10:27
标题:
关于StringBuffer问题
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;
}
}
运行结果是helloJava..........java
为什么不是Java.........java?
作者:
不落星辰
时间:
2014-8-22 12:32
本帖最后由 不落星辰 于 2014-8-22 12:39 编辑
确实。。没明白。。都差点看错了
作者:
依然超级赛亚人
时间:
2014-8-22 12:43
本帖最后由 依然超级赛亚人 于 2014-8-22 12:47 编辑
回答这道问题之前首先说明,我也不是真的确定我的说法是对的,只是提出自己的一种想方法仅供参考讨论,请楼主斟酌。
我想可能是你的变量定义和使用“分离了”。也就是说你在主方法中定义了s1和s2,但是你却在其他方法show()中使用它们,实际上你只是把在主方法中的两个变量s1和s2的地址值复制了一份去用,你虽然在show()中做了地址的变化,但是你并没有改变主方法下这两个变量的地址。也就是只在show()中你的这两个变量的地址值可以相等,打印出相同结果java----java。而你把打印语句写在主方法中,它当然还是主方法下的状态,这跟定义基本类型变量可能没区别。
比如你在main中定义了这条语句:
int a= 10,b=20;
你用show(int a,int b)封装了int sum;
sum=a+b;
a=b;
这几条语句,然后在main中调用show(a,b)和System.out.println(a+b);你认为会出现结果是40的情况吗?可以试试。
作者:
不落星辰
时间:
2014-8-22 12:59
在show()方法里s1 = s2 ,s1根本没指向s2的值
把s1.append(s2);注释掉。。打印输出的是:hello.......java
作者:
不再上网
时间:
2014-8-22 13:02
你方法里调用的都是形参。都是在操作形参。假如你想输出Java.........java的时候,你必须运算完毕后返回结果。
作者:
tiandzwx
时间:
2014-8-22 15:15
show(a,b);
private static void show(StringBuilder s1, StringBuilder s2) ;
都用s1和s2有点看不清,我把调用的地方换成了a和b
调用的时候相当于做了以下的动作:
s1 = a, s2 = b;
如果在show函数里操作s1跟s2,就相当于:
s1 = s2,跟a和b完全无关
Understand?
作者:
cs8630323
时间:
2014-8-22 20:05
s1=s2这里,这个操作是把s1(这个s1是原s1指引的复制)指引指向s2的对象,对原s1没影响,这里涉及java参数是值传递的问题。
作者:
王责彬
时间:
2014-8-22 21:20
学习学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2