首页 新闻 会员 周边 捐助

java中StringBuilder.appent方法创建几个对象

0
[待解决问题]

String s1=“a”; s1=new StringBuilder("a").appent("b").toString();上面两条语句,在执行的过程中创建了几个对象?麻烦哪位大神详细讲解一下!!!

丫头的小橙子的主页 丫头的小橙子 | 菜鸟二级 | 园豆:202
提问于:2018-11-14 21:39
< >
分享
所有回答(2)
0

在Java中StringBuilder是继承AbstractStringBuilder,在AbstractStringBuilder是byte[] value; 存放字符内容

  public AbstractStringBuilder append(String str) {
        if (str == null) {
            return appendNull();
        }
        int len = str.length();
        ensureCapacityInternal(count + len);
        putStringAt(count, str);  //这里
        count += len;
        return this;
    }

   private final void putStringAt(int index, String str) {
        if (getCoder() != str.coder()) {
            inflate();
        }
        str.getBytes(value, index, coder);
    }
    //在StringBuilder源码中toString,新string对象
    public String toString() {
        // Create a copy, don't share the array
        return isLatin1() ? StringLatin1.newString(value, 0, count)
                          : StringUTF16.newString(value, 0, count);
    }

具体你可以看源码!

秋壶冰月 | 园豆:5903 (大侠五级) | 2018-11-14 23:00

源码我看了。主要是appent方法的返回值是this,这个返回值的时候会不会新创建一个StringBuilder对象?主要是这个。

支持(0) 反对(0) 丫头的小橙子 | 园豆:202 (菜鸟二级) | 2018-11-15 00:08

@丫头的小橙子: 你看了还不明白吗? append的时候不会产生新String的对象,只有在toString的产生新的String对象

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2018-11-15 08:48

@秋壶冰月 appent的时候我知道不会新建string对象,我想知道的是会不会在appent的时候新建一个Stringbuilder的对象。

支持(0) 反对(0) 丫头的小橙子 | 园豆:202 (菜鸟二级) | 2018-11-15 11:19

@丫头的小橙子: 这个还是看源码呀,在append函数中,ensureCapacityInternal函数,value空间不够用的时候,才会进行分配内存,将原有value内容拷贝到新的分配。但不会产生新的StringBuilder对象。

···java
StringBuilder builer = new StringBuilder(); //在构造函数中,默认分配16,char value[];
···
还有感觉你纠结的地方不太对。才要知道内部怎么实现的。一定要看源码。每个jdk源码版本可能不太一样,以自己的版本分析。

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2018-11-15 11:46
0

好阔怕的面试题…

丶newbie | 园豆:211 (菜鸟二级) | 2018-11-15 00:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册