Java StringBuffer.append()的未知行为
StringBuffer.append的奇怪行为: 国家: 如果角色的数量从其当前容量增加,则它>将容量增加oldcapacity*2+2 可通过以下代码进行演示: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;
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。