Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StringBuffer.append()的未知行为_Java_Stringbuffer - Fatal编程技术网

Java StringBuffer.append()的未知行为

Java StringBuffer.append()的未知行为,java,stringbuffer,Java,Stringbuffer,StringBuffer.append的奇怪行为: 国家: 如果角色的数量从其当前容量增加,则它>将容量增加oldcapacity*2+2 可通过以下代码进行演示: class test { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append("abcdef"); // 16;

StringBuffer.append的奇怪行为: 国家:

如果角色的数量从其当前容量增加,则它>将容量增加oldcapacity*2+2

可通过以下代码进行演示:

class test {
        public static void main(String[] args) {
                StringBuffer sb = new StringBuffer();

                sb.append("abcdef"); // 16;
                System.out.println(sb.capacity());

                sb.append("1234561711"); // 34
                System.out.println(sb.capacity()); // 34
        }
}
class test {
        public static void main(String[] args) {
                StringBuffer sb = new StringBuffer();

                sb.append("abcdef"); // 16;
                System.out.println(sb.capacity());

                sb.append("12345617111111111111111111111111111111"); // 44 total 44 character in sb, so capacity should be 70 as it goes from 16, 34, 70, 142 etc.
                System.out.println(sb.capacity()); // 34
        }
}
但是,它在以下代码中显示了奇怪的行为:

class test {
        public static void main(String[] args) {
                StringBuffer sb = new StringBuffer();

                sb.append("abcdef"); // 16;
                System.out.println(sb.capacity());

                sb.append("1234561711"); // 34
                System.out.println(sb.capacity()); // 34
        }
}
class test {
        public static void main(String[] args) {
                StringBuffer sb = new StringBuffer();

                sb.append("abcdef"); // 16;
                System.out.println(sb.capacity());

                sb.append("12345617111111111111111111111111111111"); // 44 total 44 character in sb, so capacity should be 70 as it goes from 16, 34, 70, 142 etc.
                System.out.println(sb.capacity()); // 34
        }
}
如果我们使用两个以上字符的附加,容量将是70! 因此,我认为在一次追加中只有一个限制突破了

Javadoc中说明了StringBuffer的ensureCapacity逻辑:

确保容量至少等于指定的最小值。如果当前容量小于参数,则会为新的内部数组分配更大的容量。新容量为以下两项中的较大者:

•最小容量参数

•旧容量的两倍,加上2


在您的第二个代码段中,44是所需的最小容量,因为在第二次追加之后,StringBuffer中将有44个字符大于旧容量的两倍,加上2,即34。因此,新的容量为44。

不清楚您的要求。您有什么问题吗?我建议使用规范的文档来源,例如,如果总长度为44,则第二种情况下的容量显然不能为34。