String,StringBuffer,StringBuilder三者之间的联系和区别

一、String 和 StringBuffer,StringBuilder
相同点:String,StringBuffer,StringBuilder都是可以用来存储字符串的

不同点:1、String存储的字符串是不可变的,StringBuffer、StringBuilder存储的字符串是可变的。
其中在String中增加字符串时,有两种方法:用 “+” 拼接和concat()添加【注意:这里拼接后的字符串是重新的一个字符串。这个字符串如果在常连池存在就直接指向,如果不在就是创建之后放入常连池,再指向,而并不是在原来的基础上拼接】

        String str = "hello";
		str = str.concat(" world");//hello world
		str = str+" java";//hello world java

而StringBuffer和StringBuilder则使用append()方法,直接在后面添加,而并非重新重建一个对象【StringBuffer和StringBuilder共用一套API接口(API可理解为一套不需要了解源码和内部具体实现的方法(函数)集合,包括源码、字节码和帮助文档)】

        StringBuffer sb = new StringBuffer();
		sb.append("hello");//hello
		sb.append(" world");//hello world

2、一般StringBuffer和StringBuilder添加字符串的速度比String添加的快【因为String是重新创建一个字符串,在重新指向;而StringBuffer和StringBuilder是直接在后面拼接】;

        String str="hello";
		String str1 ="world";
		String str2 = str + str1;//hello world
		
		StringBuffer sb = new StringBuffer();
		sb.append(str);
		sb.append(str1);//hello world 

但是,你是不是觉得String就是比他两个慢呢,oh,no!下面这种方式就是String较快了,其实这是java虚拟机(JVM)的一种给你的一种“视觉混扰”,其实在JVM底层在你这样添加时他是当做String str = "hello world"来处理的;因此这种情况String添加速度较快

        String str="hello"+"world";
        	
		StringBuffer sb = new StringBuffer("hello");
		String str = " world";
		sb.append(str); 

二、StringBuffer 和 StringBuilder
相同点:共用一套API,StringBuilder是在StringBuffer的基础上产生的;
不同点:1.StringBuffer线程安全,StringBuilder线程不安全;
2.StringBuilder速率比StringBuffer速率快;(有点在某些方面有时候就是缺点,StringBuffer慢的原因就是有锁安全,因此就慢,想象一下自己在排队过安检的时候)
在这里插入图片描述
在这里插入图片描述
三、扩展,包装类、String类、线程,DataSource(数据源)都有一个叫做“池”的概念
1. 包装类和String类叫做常量池【常量池JDK1.6之前是存在于jvm方法区内存,1.7是jvm堆内存,1.8之后是jvm的元空间】
2.线程的叫做线程池
3.常用的DataSource—Druid【connectionPool连接池,底层用jdbc和线程池技术实现】(国产阿里的)、C3P0和dbcp(国外)
不管是叫常量池或者常量池最大的作用就是代码复用,使用的时候提高执行效率

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值