无意中看到帖子http://www.iteye.com/topic/984288,回想上午在看org.apache.commons.lang.StringUtils源码的时候,发现这么一段code:
public static String join(Iterator iterator, String separator){
...
StringBuffer buf = new StringBuffer(256);
...
}
按照我之前的习惯,就直接StringBuffer sb = new StringBuffer("");了,why?
分析source code,StringBuffer的构造器为默认构造长度为16的字符数组。
public StringBuffer() {
super(16);
}
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
看继承的类的实现:
char[] value;
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
void expandCapacity(int minimumCapacity) {
int newCapacity = (value.length + 1) * 2;//先以(当前容量+1)*2扩容
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
newCapacity = minimumCapacity; //如果增长超过上面扩容的容量,以增长的容量进行扩容
}
value = Arrays.copyOf(value, newCapacity); //数组copy,底层无非就是System.arraycopy(),艹!~~
}
应该无非就是减少重建array的次数,当然前提是知道大概StringBuffer的容量。
分享到:
相关推荐
了解 java.lang 包 掌握包装类 掌握String 和 StringBuffer 类 运用以下类的方法: Math Class Object
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class); String str = (String)constructor.newInstance(new StringBuffer("abc")); System.out.println(str); ...
4.1.3 java.lang.StringBuffer 4.1.4 封装类 4.1.5 java.lang.Math 4.1.6 java.lang.System 4.1.7 java.lang.Cloneable 4.1.8 java.lang.Thread 4.2 java.io包 4.3 java.util包 4.3.1 java.util.StringTokenizer ...
< java.lang >StringBuffer字符串缓冲区:★★★☆ 73 < java.lang >StringBuilder字符串缓冲区:★★★☆ 74 基本数据类型对象包装类★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 < java.util > ...
, java.io.InputStream, java.nio.ByteBuffer, java.io.ByteArrayOutputStream)TXT (java.lang.String, char[], java.nio.CharBuffer, java.lang.StringBuffer, java.lang.StringBuilder)支持的数据源:...
学习目标 了解 java.lang 包 掌握包装类 掌握String 和 StringBuffer 类 运用以下类的方法: Math Class Object
在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,比如正确地、巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能。
java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 ........... 5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非...
JAVA面试题 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
java面试笔试题大汇总: JAVA相关基础知识(100多到)、代码差错等 ...java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 。。。
java面试笔试题集合4. 多态性: 多态性是指允许不同类的...java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别
它通过java.lang.Process与 ffmpeg 集成。 灵感来自 在以下人员的帮助下进行了测试 操作系统:Ubuntu、MacOS、Windows JDK : 8, 11, 14 用法 < dependency > < groupId >com.github.kokorin.jaffree</ ...
所有的checked exception是从java.lang.Exception类衍生出来的,而runtime exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的。 它们的不同之处表现在两方面:机制上和逻辑上。 一...
12.2 java.lang.StringBuffer 167 12.3 wrapper class 169 12.4 java.lang.Math类 172 12.5 java.Math.BigInteger类 174 12.6 java.Math.BigDecimal类 176 12.7 巩固练习 177 第13章 Java输入与输出(I...
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...
34、String 和 StringBuffer 的区别 ............................................................................... 24 35、如何把一段逗号分割的字符串转换成一个数组? .......................................