String,StringBuilder,StringBuffer介绍

在日常编程中,String是java中使用最频繁的类之一,而且许多公司面试喜欢问相关的问题,同时相关的字符串类,还有StringBuilder,StringBuffer这几个类,下面是这三个类的介绍

1.String (java.lang.String )
之前面试的时候就遇到过面试官问String具体是怎么实现,想了解一个类,最好的方法就是类的实现源代码
java.lang.String 打开源码文件 第一眼看到String类被声明为final类型
通过看源代码 可以简单分析出几点
1.String类是final类,意味着String类是不可被继承的
2.String类中的主要成员属性是个char类型数组,实际上String是通过char数组来保存字符串的
jdk1.7中 String的成员方法主要是对字符串进行sub,replace等操作,通过源码查看发现,这些操作都不是在原有的字符串上面进行的,而是重新调用了String的构造方法生成了一个新的字符串对象,原始的字符串并没有改变。所以每次对于String的操作都会生成新的String对象,这容易导致效率低下同时也大量占用有限的内存。


我们一般常用下面两种方法来创建一个字符对象
1.String str="hello world"
2.String str=new String("hello world")
区别在那里?
String str1 = "hello world",运行期间字面常量hello world被存储在运行时常量池。通过这种方式来讲String对象和引用半丁的话,JVM执行引擎会现在运行时常量池查找是否存在相同的字面常量
String str=new String("hello world"),new了一个新的字符对象存储在堆,str存储在栈中,通过new来创建的对象,创建出的一定是不同的对象。

2.StringBuilder
StringBuilder 是可变类,内部的存储结构还是char数组,但是实现方式和String不同,在进行字符串处理时,不生成新的对象,在内存使用上要优于String类
StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。

3.StringBuffer
可看做是线程安全的StringBuilder



String,StringBuilder,StringBuffer区别是什么
~String:不可变的字符序列,任何操作都会创建一个新的String对象
~StringBuilder:可变的字符序列,支持向其中添加新字符,不需要创建新的对象
~StringBuffer:线程安全版的StringBuilder,但是性能较StringBuilder差一些


使用建议 

1.使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。
2.使用StringBuffer类的场景:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。
3.使用StringBuilder类的场景:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值