黑马程序员技术交流社区

标题: 关于StringBuilder的疑惑 [打印本页]

作者: 小洋人最happy    时间: 2012-12-25 14:12
标题: 关于StringBuilder的疑惑
public classStringBuilderTest {
    public static void main(String[] args) {
       StringBuilders1 = newStringBuilder("hello");
       StringBuilders2 = newStringBuilder("java");
       show(s1,s2);
       System.out.println(s1+"......."+s2);
    }
    private static void show(StringBuilder s1,StringBuilder s2) {
       s1.append(s2);
       s1= s2;//这个不是付给s1了吗
    }
}
为什么打印结果是hellojava。。。。。Java  

作者: 高境    时间: 2012-12-25 14:17
s1.append(s2);是将s2添加到s1的末尾处,所以s1变成了hellojava
作者: 管冉    时间: 2012-12-25 14:19
必须先实例化一个:
stringBuilder sBuilder = new stringBuilder();
可以拼接执行SQL语句,易于阅读
sBuilder.Append("select * from tb1");
sBuilder.Append("where id=1");

作者: 郭金龙    时间: 2012-12-25 14:51
你好,我把你变量名改了一下,你能看出原因吗?
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 s3,StringBuilder s4) {
       s3.append(s4);
           System.out.println("1->"+s3);
            System.out.println("1->"+s4);
       s3= s4;//这个不是付给s1了吗
           System.out.println("2->"+s3);
           System.out.println("2->"+s4);   
    }
}

运行的结果是:
1->hellojava
1->java
2->java
2->java
hellojava.......java
希望对你有帮助!

作者: 李栋伟    时间: 2012-12-25 15:13
郭金龙 发表于 2012-12-25 14:51
你好,我把你变量名改了一下,你能看出原因吗?
public class StringbuilderTest {
    public static void  ...

你也可以把main()方法中的show(s1,s2);注释掉。然后把show()方法中内容直接写到main()方法中。与改变量这个段代码对比分析一下。仔细分析一下赋值。内存地址
  1. public static void main(String[] args) {

  2.                 StringBuilder s1 = new StringBuilder("hello");
  3.             StringBuilder s2 = new StringBuilder("java");
  4.             //show(s1,s2);
  5.             s1.append(s2);
  6.                System.out.println("s1---"+s1);
  7.                s1= s2;
  8.                System.out.println("s1---"+s1);
  9.                System.out.println("s2---"+s2);
  10.             System.out.println("s1====="+s1);
  11.             System.out.println(s1+"......."+s2);
  12.         }
复制代码
运行结果:

QQ截图20121225151145.png (1.47 KB, 下载次数: 32)

QQ截图20121225151145.png

作者: 黄锦成    时间: 2012-12-25 15:16
本帖最后由 黄锦成 于 2012-12-25 15:19 编辑

这个我解决了,发个图给你看看[attach]11011[/attach]

QQ截图20121225151817.png (14.23 KB, 下载次数: 37)

对象在内存中的情况

对象在内存中的情况

作者: 黄锦成    时间: 2012-12-25 16:08
黄锦成 发表于 2012-12-25 15:16
这个我解决了,发个图给你看看

这个是我的个人见解。以前我在学习内存分布这一块,学了挺久,后来看了张老师的视频,才入门了。张老师有句话,不要只看表面,要看在内存中的分布情况




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2