String,StringBuffer,StringBuilder分析
2019-08-02 17:42
1261 查看
1、String:
- String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容,而最初的String对象则纹丝未动。
- String字符串不可变,线程安全,开销大,垃圾产生多
2、StringBuffer
- StringBuffer每一个修改方法,实际都是在操作StringBuffer初始化时所创建的对象
- StringBuffer字符串可变,线程安全,开销大
3、StringBuilder
- StringBuilder每一个修改方法,实际都是在操作StringBuilder初始化时所创建的对象
- StringBuilder字符串可变,非线程安全,开销小。
String,StringBuilder字符串可变测试
public static String uocase(String s){ return s.toUpperCase(); } public static StringBuilder apendDemo(StringBuilder s){ return s.append("123"); } public static void main(String[] args) { String a = "asd"; System.out.println(a); String aa = uocase(a); System.out.println(aa); System.out.println(a); StringBuilder b = new StringBuilder("asdasd"); System.out.println(b); StringBuilder bb = apendDemo(b); System.out.println(b); System.out.println(bb); 测试结果: asd ASD asd asdasd asdasd123 asdasd123 }
-
从上测试结果可以看出,对String字符串进行操作时,总是在不断创建新的String对象,用来接收String改变后的值
-
而StringBuilder在操作时候,总是对StringBuilder原对象进行操作
以上是Java编程思想给出的一个示例思路。不够明显的话,看下面这个例子
public static void main(String[] args) { //-----------String------------------------- String param = "字符串"; System.out.println(param); System.out.println(param.hashCode()); param = param+":demo"; System.out.println(param); System.out.println(param.hashCode()); //------------StringBuilder------------------------- StringBuilder stringBuilder = new StringBuilder("StringBuilder初始值"); System.out.println(stringBuilder); System.out.println(stringBuilder.hashCode()); stringBuilder.append("拼接值"); System.out.println(stringBuilder); System.out.println(stringBuilder.hashCode()); //-------------StringBuffer----------------------------------- StringBuffer stringBuffer = new StringBuffer("StringBuffer初始值"); System.out.println(stringBuffer); System.out.println(stringBuffer.hashCode()); stringBuffer.append("拼接值"); System.out.println(stringBuffer); System.out.println(stringBuffer.hashCode()); } 输出结果: 字符串 23468387 字符串:demo 1137810842 StringBuilder初始值 780237624 StringBuilder初始值拼接值 780237624 StringBuffer初始值 205797316 StringBuffer初始值拼接值 205797316
HashCode:在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行hashcode比较时所用的信息没有被修改。
-
可以看出,只有String再进行操作后,HashCode码有变化。String创建了一个新对象接收,其他两种字符,依旧是在原对象上进行操作
相关文章推荐
- String、StringBuffer、StringBuilder分析
- Java的字符类String、StringBuffer与StringBuilder异同对比分析
- Java之String、StringBuffer、StringBuilder的区别分析
- JDK源码分析之String、StringBuilder和StringBuffer
- Java的字符类String、StringBuffer与StringBuilder异同对比分析
- 深入java String拼接和StringBuffer、StringBuilder(分析源码)
- 通过源码分析String、StringBuffer和StringBuilder
- Java的字符类String、StringBuffer与StringBuilder异同对比分析
- 探秘Java中String、StringBuilder以及StringBuffer--分析的非常清楚,值得一看
- 分析String ,stringbuilder, stringbuffer
- String-StringBuffer-StringBuilder的区别和源码分析
- java.lang包之String,StringBuffer,StringBuilder分析(设个坑,有时间补充)
- String,StringBuffer,StringBuilder性能分析
- String、StringBuilder、 StringBuffer 深入分析 源码解析
- JDK源码分析系列---String,StringBuilder,StringBuffer
- 【Java】从源码角度分析String,StringBuffer和StringBuilder
- 大数据学习--day14(String--StringBuffer--StringBuilder 源码分析、性能比较)
- CharSequence,String ,Stringbuilder和StringBuffer源码分析
- String、StringBuffer、StringBuilder源码分析
- String、StringBuilder与StringBuffer源码分析