码迷,mamicode.com
首页 > 其他好文 > 详细

String,StringBuilder,StringBuffer三者的区别

时间:2020-03-21 15:06:25      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:引用   检测   影响   string   适用于   介绍   创建对象   注意   过程   

1.运行速度,或者说是执行速度,(前提是要对字符串进行change操作):在这方面运行速度快慢为:StringBuilder > StringBuffer > String(因为String被修改时还需创建个新的对象,将旧的回收)
2.介绍这三者:
  1)这三个只有String是字符串常量,被创建后不能被修改,其余两个都是 变量,能被修改(String类是不可变类,指向的内存地址的内容不可以改变,但指针指向可变)
  2)StringBuffer是线程安全的(因为它的类方法中加入了Synchronized关键字)
3. 总结一下
  String:适用于少量的字符串操作的情况
  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
**注意:
  1)String是final类,不能被继承,内部是靠char数组来保存值的
  2)对String对象的任何改变都不影响到原对象,相关的任何change操作 都会生成新的对象

  关于String的难点:String str="hello world"和String str1=new String("hello world")的区别:(也就是说str不等于str1)
String str1 = "hello world";和String str3 = "hello world"; 都在编译期间生成了 字面常量和符号引用,运行期间字面常量"hello world"被存储在运行时常量池(当然只保存了一份)。通过这种方式来将String对象跟引用绑定的话,JVM执行引擎会先在运行时常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。

  总所周知,通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。

String,StringBuilder,StringBuffer三者的区别

标签:引用   检测   影响   string   适用于   介绍   创建对象   注意   过程   

原文地址:https://www.cnblogs.com/nyhhd/p/12539013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!