每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
JDK1.7
StringBuilder
(1)final修饰的类,继承自Object类,实现接口 Serializable, CharSequence
(2)字符的可变序列。这个类提供了与StringBuffer兼容的API,但没有保证同步。 这个类被设计为在字符串缓冲区被单个线程使用的地方(通常情况下)使用的StringBuffer的替换 (3)在可能的情况下,建议使用这个类来优先于StringBuffer,因为在大多数实现下它将会更快。 (4)StringBuilder的主要操作是append和insert方法,重载,以接受任何类型的数据。 每一个有效地将一个给定的数据元转换为一个字符串,然后追加或将字符串的字符插入到字符串生成器中。 append方法总是在构建器的末尾添加这些字符;插入方法在指定点添加字符 (5)一般来说,如果sb指的是StringBuilder的实例,那么sb.append(x)与sb.insert(sb.length(),x)具有相同的效果 (6)每个字符串生成器都有一个容量。只要字符串构建器中包含的字符序列长度不超过容量,就不需要分配新的内部缓冲区。 如果内部缓冲区溢出,它会自动变得更大.
(7)使用多个线程,StringBuilder的实例不安全。如果需要这样的同步,那么建议使用StringBuffer.
(8)除非另有说明,否则将null参数传递给这个类的构造函数或方法将导致抛出一个NullPointerException异常
1.逗号拼接(去掉最后一个逗号)
意思就是拼接时候中间加上逗号,同时最后一个逗号不添加,
思路:就是拼接完了删除最后一个逗号
@RequestMapping(“/findOne.do”)
public String findOne(Integer id) {
StringBuilder sb = new StringBuilder();
//查询出来角色了..
List
//如果不为空就开始拼接
if (roles != null && roles.size() > 0) {
for (SysRole sysRole : roles) {
sb.append(sysRole.getRolename());
sb.append(“,”);
}
}
//如果有数据
if (sb.length() > 0)
//调用 字符串的deleteCharAt() 方法,删除最后一个多余的逗号
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}