本文共 950 字,大约阅读时间需要 3 分钟。
java中用于字符串处理的常用类有三个: String,StringBuffer和StringBuilder,那么三者有什么异同呢?
都是final类,不允许被继承。这主要是从安全性上考虑防止继承后某些参数被修改。
线程安全:
StringBuffer是线程安全的,而StringBuilder是线程不安全的,因为 StringBuffer的方法都是被synchronized修饰的,而StringBuilder的方法没有synchronized修饰关键字。StringBuffer代码段:
@Override public synchronized int length() { return count; } @Override public synchronized int capacity() { return value.length; }
StringBuilder代码段:
@Override public StringBuilder append(Object obj) { return append(String.valueOf(obj)); } @Override public StringBuilder append(String str) { super.append(str); return this; }
性能:
执行速度:StringBuilder > StringBuffer > String String为字符串常量,所以String类的操作会涉及到大量的对象拷贝。StringBuilder和StringBuffer均为字符串变量因此可以规避这个问题。 StringBuilder 没有对方法加锁,所以StringBuilder的性能要好于StringBuffer。1.String适用于少量的字符串操作的场景。
2.StringBuilder适用于单线程下大量字符串操作的场景。 3.StringBuffer适用多线程下大量字符串操作的场景。转载地址:http://hecmb.baihongyu.com/