首页 > 其他 > 详细

String

时间:2020-09-22 17:39:22      阅读:47      评论:0      收藏:0      [点我收藏+]

String与StringBuffer与StringBuilder

String类

  • String是一个final类,代表不可变的字符序列
  • String对象的字符内容是存储在一个字符数组value[]中的(JDK9改为byte[])
  • String实现Serializable/Comparable接口,分别代表其是可序列化的和可以比较大小

JDK1.8里,字符串常量池在堆里

常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量

只要其中有一个是变量,结果就在堆中

若拼接的结果调用intern()方法,返回值就在常量池中

String类型的常量池比较特殊。它的主要使用方法有两种:

  • 使用双引号
  • intern()方法

JDK1.6中,常量池位置在永久代中,存储的是对象!jdk1.7 常量池位置在堆中!

存储的是引用!JDK8中,永久代被元空间取代,转移到堆内

String s1 = "a";	//在字符串常量池中创建了一个字面量为"a"的常量!!!
    
s1 = s1 + "b";		//原来的“a”字符串对象已经丢弃了,堆空间出现“ab”

String s2 = "ab";	//直接在字符串常量池中创建一个字面量为“ab”的字符串

String s3 = "a" + "b";	//s3指向字符串常量池中已经创建的“ab”字符串

String s4 = s1.intern();	//堆空间s1对象调用intern,将常量池中已经存在的“ab”赋值给s4


StringBuffer类

java.lang.StringBuffer代表可变的字符序列

  • 作为参数传递时,方法内部可以改变值!

StringBuffer类对象必须使用构造器生成!!!

  • StringBuffer():初始容量为16的字符串缓冲区
  • StringBuffer(int size):构造指定容量的字符串缓冲区
  • StringBuffer(String str):将内容初始化为指定字符串内容

StringBuilder类

其和StringBuffer基本一致,但是由于StringBuffer效率低所有引入StringBuilder

但是它是线程不安全的!而StringBuffer是线程安全的!!

作为参数传递的话,String不会改变值,但是StringBuffer与StringBuilder会改变值

总结:

String、StringBuffer、StringBuilder都是final类,即都不可以被继承

String类长度不可变,StringBuffer与StringBuilder类长度是可以改变的

StringBuffer线程安全、StringBuilder线程不安全!

String

原文:https://www.cnblogs.com/yfyyy/p/13712648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!