String,StringBuffer和StringBuilder

基本概念

  1. String

String是字符串是java.lang包下的类,因为有final修饰所以不能被继承
String不是基本数据类型,底层封装的是字符串数组,以及操作数据的api方法
字符串对象一旦被创建,对象将无法被更改,单字符串的引用可以重新赋值
String常量池:
java为了提高性能,静态的字符串(常量),在常量池中创建,并尽量使用同一个对象,重用静态字符串
对重复出现的字符串JVM会首先在常量池中查找.如果有就返回该对象

比如:
 String str1="abc";//abc字符串放置到常量池中,在栈中引用是str1
 在另一个作用域中
 String str2="abc";abc在常量池中寻找是否有相同字符串,如果有就指向他,没有在常量池中添加
  1. StringBuffer和StringBuilder比较

StringBuffer和StringBuilder对象可以改变 ,StringBuffer是同步,线程安全,StringBuilder是异步,线程不安全
StringBuffer是单线程的,因为里面的方法都是被synchronized修饰了.所以它线程安全,但是效率自然就降低.
StringBuilder不是是单线程的,因为里面的方法没有被synchronized修饰了.所以它线程不安全,所以效率要更高.

  1. 三者比较

运行速度快慢:StringBuilder>StringBuffer>String
String运行最慢的原因

String是字符串常量,对象创建后不可以更改,
StringBuilder和StringBuffer是字符串变量,对象创建后可以更改

例如:

String s = "a";
System.out.println(s);//输出a
s = s + "b"; 
System.out.println(s);//输出ab
/* 执行过程:JVM首先创建一个String对象s.再把a赋值个对象s,所以第一次输出a,第二次时,JVM会重新创
建一个s对象,再把a和b加起来赋值给s,,随后之前的s对象以及b会被垃圾收集管理器(GC)收集,所以String的运行速度慢 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值