`

StringBuffer源码浅析(append方法)

 
阅读更多

一、append(int i),来自StringBuffer的父类AbstractStringBuilder源码

步骤:

1、围观源码

 

   public AbstractStringBuilder append(int i) {
        if (i == Integer.MIN_VALUE) {
            append("-2147483648");
            return this;
        }
        // stringSizeOfInt,判断输入的整数i占多少位,如负数+1,方法源码往后看。
        int appendedLength = (i < 0) ? stringSizeOfInt(-i) + 1 
                                     : stringSizeOfInt(i);
        int spaceNeeded = count + appendedLength;
        if (spaceNeeded > value.length) // 检查容量,是否需扩容
            expandCapacity(spaceNeeded);
	Integer.getChars(i, spaceNeeded, value); // 把整型i以字符的形式加进buffer(value)中,getChars源码较复杂,暂时未看。
        count = spaceNeeded; //更新count长度。
        return this;
    }

 

 2、围观占位表和整数占位算法。

 

//占位表
 final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,99999999, 999999999, Integer.MAX_VALUE };

    // Requires positive x
    static int stringSizeOfInt(int x) {
        for (int i=0; ; i++)
            if (x <= sizeTable[i]) // 无限循环将整型x与占位表逐一对比,例如x=100,将与占位表索引为2的999匹配。
                return i+1; //返回2+1,占3位。
    }

 

 3、顺便多看一下append(long l)的源码,其实内部原理跟append(int i)原理一样。

 

// Requires positive x
    static int stringSizeOfLong(long x) {
        long p = 10;
        for (int i=1; i<19; i++) {
            if (x < p) // 与两位数10比较,小于返回占一位
                return i;
            p = 10*p; //如此类推,小于100占2位
        }
        return 19; // 最大19位
    }
分享到:
评论

相关推荐

    String StringBuffer和StringBuilder区别之源码解析

    "String StringBuffer和StringBuilder区别之源码解析" 在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、...

    StringBuffer类的常用方法.md

    StringBuffer类的常用方法.md

    StringBuffer

    2. append 方法:往字符串尾部添加字符或者字符串,可以追加各种类型的数据,包括字符串、字符、整数、浮点数等。 3. insert 方法:往字符串中间插入字符或字符串,可以指定插入的位置。 4. delete 和 deleteCharAt ...

    Java中StringBuffer的常用方法.pdf

    在上述代码中,我们首先创建了一个StringBuffer实例sb,然后通过多次调用append方法,将不同的数据追加到sb中。最终,sb会包含一条完整的日志记录信息。 接下来,我们来探讨deleteCharAt和delete方法。这两个方法...

    Java StringBuilder和StringBuffer源码分析

    `append()`方法是`StringBuilder`和`StringBuffer`中字符串拼接的核心。 三、线程安全与效率 `StringBuilder`和`StringBuffer`的主要区别在于线程安全性。`StringBuilder`没有采取任何同步措施,因此在多线程环境下...

    StringBuffer & StringBuilder 源码分析.docx

    StringBuffer & StringBuilder 源码分析 StringBuffer 和 StringBuilder 是 Java 语言中两个常用的字符串操作类,它们都是 CharSequence 接口的实现类,并且都继承了 AbstractStringBuilder 类。下面是对这两个类的...

    java高级特性StringBuffer类.doc

    Java 高级特性 StringBuffer ...append 方法是 StringBuffer 类中的一种常用方法,该方法的作用是追加内容到当前 StringBuffer 对象的末尾,类似于字符串的连接。调用该方法以后,StringBuffer 对象的内容也发生改变。

    String和StringBuffer详细用法总结

    在这两个例子中,第一个使用了`+`运算符进行字符串拼接,第二个使用了`StringBuffer`的`append()`方法。后者在循环或大量字符串拼接时效率更高。 #### 示例2 ```java public String getString(String s1, String s2...

    String、StringBuffer、StringBuilder的使用方法

    它的内部机制与`String`类似,但是提供了`append()`和`insert()`等方法来改变字符串内容,而不会每次都创建新对象。例如: ```java StringBuffer sb = new StringBuffer("Hello"); sb.append(" World"); // 不会...

    StringBuffer类的总结

    2. **追加内容**:使用 `append()` 方法可以将指定的内容添加到 `StringBuffer` 的末尾。 ```java sb.append("要追加的字符串"); ``` 3. **插入内容**:使用 `insert()` 方法可以在指定位置插入内容。 ```java ...

    Java中StringBuffer对象的初始化.pdf

    `StringBuffer`提供了多种方法来添加内容,如`append()`方法: ```java StringBuffer sb = new StringBuffer(); sb.append("Hello, "); sb.append("World!"); System.out.println(sb); // 输出 "Hello, World!" ```...

    从源码角度简单看StringBuilder和StringBuffer的异同(全面解析)

    StringBuilder的主要操作是append和insert方法,这些方法可以将任何类型的数据转换为字符串,并将其添加或插入到StringBuilder中。 StringBuffer的特点 StringBuffer是StringBuilder的线程安全版本,它提供了与...

    Java语言中StringBuffer的用法

    在多线程环境下,`StringBuffer`的方法如`append()`和`insert()`都是同步的,保证了线程安全。 接下来,我们详细讲解`StringBuffer`的一些关键方法: 1. **append()**:此方法用于在现有字符串末尾添加新的字符...

    String ,StringBuffer与StringBuilder

    向 StringBuffer 中赋值可以通过它的 append 方法,例如 sb.append("hello");。 在字符串连接操作中,StringBuffer 的效率要比 String 高。例如,String str = new String("welcome to ");str += "here";的处理步骤...

    纯手工js数据交互

    * [方法名]:CheckReplace (特殊字符 转换 方法) [功 能]:字符串转换函数,(用于出库时转换特殊格式字符) * * @param [ s ]:要转换的字符串 * @return [返回]:转换后的安全的str */ public static String ...

    Java基础之常用类集合,异常、IO文件等基础使用

    StringBuffer 的添加功能包括 append 方法和 insert 方法。append 方法可以将任意类型的数据添加到字符串缓冲区里面,而 insert 方法可以在指定位置把任意类型的数据插入到字符串缓冲区里面。 StringBuffer 的删除...

    String与StringBuffer区别详解

    而StringBuffer示例中,使用append方法实际上是在修改原有对象的内容,并且这种修改会反映在所有指向这个StringBuffer对象的引用上。 为了进一步理解二者的差异,我们可以通过String和StringBuffer的内存使用和操作...

    java_初学者必须了解的基本知识.doc

    4. 字符串的连接方法:String提供了concat方法,StringBuffer提供了append方法,例如str.concat("Hello")和stringBuffer.append("Hello")。 5. 返回指定位置的字符:String和StringBuffer都提供了charAt方法,例如...

Global site tag (gtag.js) - Google Analytics