导读:在实际运用了,我们会频繁的用到string、stringBuffer和stringBuilder这三个东西,那么,他们之间的区别是什么呢。本文主要是从拼写SQL语句的角度,来阐释他们之间的区别!

一、整体观摩

最近,在写SQL语句的时候,常常会用到3种写法,一种是直接用string写,一种是用StringBuffer,一种是用StringBuilder,先来看看其具体使用。

1.1,String

<span style="font-family:KaiTi_GB2312;font-size:18px;">String sql="update t_client set is_leaf=? where id=?";</span>

1.2,StingBuffer

<span style="font-family:KaiTi_GB2312;font-size:18px;">StringBuffer sbSql = new StringBuffer();
sbSql.append("select a.id, a.pid, a.name, a.client_id, a.client_level_id, ")
.append("b.name as client_level_name, a.bank_acct_no, a.contact_tel, a.address, a.zip_code, ")
.append("a.is_client, a.is_leaf ")
.append("from t_client a left join t_data_dict b on a.client_level_id=b.id where a.id=?");</span>

1.3,StringBuilder

<span style="font-family:KaiTi_GB2312;font-size:18px;">StringBuilder sbSql=new StringBuilder();
sbSql.append("update t_user ")
.append("set user_name = ?, ")
.append("password = ?, ")
.append("contact_tel = ?, ")
.append("email = ? ")
.append("where user_id = ? ");</span>

从上面的例子,可以看出,尤其是StringBuffer和StringBuilder之间,除了实例化的类不一样,其余使用都一样,那么这三者之间的区别是什么呢?

二、细节探究

2.1,String

C++、java等编程语言中的字符串。 在java、C#中,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。 String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。

简单说来:如果定义一个String变量:String strTest="a", 然后我们将这个变量重新赋值:strTest="b",事实上,内存中,有两个string对象。它为b值重新分配了一个空间。

2.2,StringBuffer

String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符 比 String使用 + 操作符添加字符 到 一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题。

2.3,StringBuilder

一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。

线程安全:线程安全就是说多线程访问同一代码,不会产生不确定的结果。编写线程安全的代码是低靠线程同步。

三、总结

总体说来,String和其他两者之间的区别,事实上也是一个常量和变量的区别。

String是一个常量式的定义,它不可以更改,所以在后续的线程安全上来说,String是一个线程安全的。

对于Buffer和Builder来说,Buffer是一个线程安全的类,不过,虽然 他是线程安全,但如果不是多线程的话,那么还是不用buffer,因为从速度上来看:StringBuilder〉StringBuffer〉String。

那么从拼写SQL语句方面来说:

确定SQL语句长度的,直接用String。不确定的用Buffer或者builder。多线程同步的,用buffer。如果说在增删改查上面的话:我感觉在查询上应该用buffer,以确保查询结果是符合逻辑一致的。

[drp 2]String、StringBuffer和StringBuilder的区别的更多相关文章

  1. String,StringBuffer与StringBuilder的区别??

    转自http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBu ...

  2. JAVA String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  3. 转 String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  4. String,StringBuffer与StringBuilder的区别??[转]

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  5. 【Java】String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  6. String,StringBuffer与StringBuilder的区别?? 缓存

    转: String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主 ...

  7. 《转》String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  8. (转)String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  9. String,StringBuffer与StringBuilder的区别与选择

    三者的区别 String:不可变类,一旦一个对象被建立的时候,包含在这个对象中的字符串序列是不可变的,直到这个对象被销毁.StringBuffer:可变字符序列的字符串.当其对象被创建的时候,可以用a ...

  10. String,StringBuffer和StringBuilder的区别

    (1)String类的API概述是这样的:String类代表字符串,Java程序中的所有字符串字面值都作为此类的实例体现.字符串是常量,它们的值在创建之后不能更改.可见,String是对象且为不可变对 ...

随机推荐

  1. (C/C++) memset

    C语言: memset   extern void *memset(void *buffer,int c,int count);   #include <string.h>   功能:把b ...

  2. ASP.NET MVC之从控制器传递数据到视图四种方式

    前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...

  3. ThreadPoolExecutor使用介绍

    private static ExecutorService exec = new ThreadPoolExecutor(8, 8, 0L,TimeUnit.MILLISECONDS, new Lin ...

  4. ADF_Starting系列4_使用ADF开发富Web应用程序之维护User Interface(Part1)

    2014-05-04 Created By BaoXinjian

  5. CF 191C Fools and Roads lca 或者 树链剖分

    They say that Berland has exactly two problems, fools and roads. Besides, Berland has n cities, popu ...

  6. 为什么学习html5

    html5  2010年正式推出 新的web时代 优势: 1,跨平台运行                      PC MAC LINUX 手机 PAD 2,硬件要求低 3,flash之外的选择 h ...

  7. JAVA while循环,do-while循环,for循环

    一.while循环 实例: public class Test{ public static void main(String[] args){ int i = 1; while(i<30){ ...

  8. PHP每日签到时怎么实现

    以淘宝网领取淘金币的签到系统为例:目标:第一天签到增加5个积分:第二天连续签到则增加8个积分:第三天连续签到,增加11个积分,第 四天连续签到,增加15个积分:第五天连续签到,增加19个积分:第六天连 ...

  9. 十一、jdk命令之Jstatd命令(Java Statistics Monitoring Daemon)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  10. ISO14229系列之一:简介

    作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍 ...