String、StringBuffer、StringBuilder的一些小经验……
一说String、StringBuffer和StringBuilder,想必大家都很熟悉,这三者经常在我们的面试题中出现,我也是看到了关于这三个的经典面试题,才触动了我之前工作中的一些经历,故而根据我自己的经验,来写写自己的感悟,分享于诸位。
首先来看下我看到的这两道面试题:
1.String和StringBuffer区别,哪个效率高。
答:String 是对一串字符进行操作是不可变类
StringBuffer是对一串字符进行操作,但是可变类
String每用一次就需要生成一次效率低。
2.StringBuffer和StringBuilder有什么区别?
答:Stringbuilder 和Stirngbuffer都是可变对象,Stringbuilder 的运行速度快,线程不安全。
这两道题的答案是正确的,但是在实际编码中如何来合理运用这三者呢?
首先,String类型是不可变的,那么我们一定要切记不能用String在循环中使用连接字符串,特别是web工程中,当大量访问的情况下,这种方式消耗的资源非常大。如下:
//这种连接方法一定要避免
for(int i=0;i<100;i++){
String a = "a";
String b = "b";
System.out.println(a+b);
}
那么,String应该用到什么情况下呢?我们根据它不可变的性质,当遇到重复使用的固定的字符串时,将字符串定义为静态常量,再使用StringBuffer或StringBuilder来进行拼接操作。如下:
public class StringTest {
private static final String STRING = "天";
public void setSystem(){
StringBuilder f = new StringBuilder("5");
System.out.println(f.append(STRING));
}
public static void main(String[] args) {
StringTest s = new StringTest();
s.setSystem();
}
}
接下来,讲StringBuffer和StringBuilder的使用场合。
我们已知:StringBuffer是线程安全的,速度较慢的;而StringBuilder是不安全的,速度较快的。
那么我们要分析一下,是保证线程安全,还是追求速度。
我们在进行web项目开发时,通常会使用框架,那就要看看使用的框架是单线程的还是多线程的,如果框架是线程安全的,那我们就可以追求速度,使用StringBuilder即可。如果是不安全的,那最好使用StringBuffer。
不过这也不是绝对的,在开发中可以根据项目要求来灵活选择。
String、StringBuffer、StringBuilder的一些小经验……的更多相关文章
- 关于String StringBuffer StringBuilder
0. String对象的创建 1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...
- String StringBuffer StringBuilder (转)
转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却 ...
- final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?
继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...
- 转:String StringBuffer StringBuilder区别
转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...
- 重温java中的String,StringBuffer,StringBuilder类
不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
- Java学习笔记--String StringBuffer StringBuilder
String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
随机推荐
- SQL优化 CREATE STATISTICS
CREATE STATISTICS 语法: https://msdn.microsoft.com/zh-cn/library/ms188038.aspx STATISTICS优化中的使用案例: htt ...
- 论Segmentation fault
刚开始学c的时候,最头疼的事情是编译总是通不过,郁闷的要死,只要编译通过了,就兴奋的要死.现在,最头疼的事情是什么呢,编译没问题,但是程序跑的时候会出现Segmentation fault! 这个东西 ...
- 【Java布局】FlowLayout布局时设定组件大小
默认的JPanel中,采用的是FlowLayout布局 下面是api中的定义: JPanel(boolean isDoubleBuffered) 创建具有 FlowLayout 和 ...
- Servlet学习三——传输文件
最先在考虑传输文件时,想通过java写一个文件上传案例,传给Servlet,Servlet再保存至数据库中,但苦于一直没找到实例,听说Flex有实际的例子,就直接用Flex例子来测试了.本文的顺序为: ...
- python之路-Day8
抽象接口 class Alert(object): '''报警基类''' def send(self): raise NotImplementedError class MailAlert(Alert ...
- mac下webpagetest搭建
我的server和agent都是在mac上搭建的,所以会和linux下有些不同 一.安装配置Apache和PHP webpagetest需要使用PHP和Apache启动服务.mac默认安装了Apa ...
- 文本提交带单引号引起mysql报错
mysql插入数据时报错:MySQL server version for the right syntax to use near 'Microsoft YaHei', 经过反复测试,原因是提交的编 ...
- target="_blank"
target="_blank":出现在<a target="_blank" href="http://">中,在开发中,在一个系 ...
- golang gbk转utf8 mssql access
package ms2mysql import ( "bytes" "golang.org/x/text/encoding/simplifiedchinese" ...
- python 模拟登录--day1
---------------edit-in-windows-by-pycharm---------------------import randomuname = "mologa" ...