[drp 2]String、StringBuffer和StringBuilder的区别
导读:在实际运用了,我们会频繁的用到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的区别的更多相关文章
- String,StringBuffer与StringBuilder的区别??
转自http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBu ...
- JAVA String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- 转 String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- String,StringBuffer与StringBuilder的区别??[转]
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- 【Java】String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- String,StringBuffer与StringBuilder的区别?? 缓存
转: String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主 ...
- 《转》String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- (转)String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- String,StringBuffer与StringBuilder的区别与选择
三者的区别 String:不可变类,一旦一个对象被建立的时候,包含在这个对象中的字符串序列是不可变的,直到这个对象被销毁.StringBuffer:可变字符序列的字符串.当其对象被创建的时候,可以用a ...
- String,StringBuffer和StringBuilder的区别
(1)String类的API概述是这样的:String类代表字符串,Java程序中的所有字符串字面值都作为此类的实例体现.字符串是常量,它们的值在创建之后不能更改.可见,String是对象且为不可变对 ...
随机推荐
- (C/C++) memset
C语言: memset extern void *memset(void *buffer,int c,int count); #include <string.h> 功能:把b ...
- ASP.NET MVC之从控制器传递数据到视图四种方式
前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...
- ThreadPoolExecutor使用介绍
private static ExecutorService exec = new ThreadPoolExecutor(8, 8, 0L,TimeUnit.MILLISECONDS, new Lin ...
- ADF_Starting系列4_使用ADF开发富Web应用程序之维护User Interface(Part1)
2014-05-04 Created By BaoXinjian
- CF 191C Fools and Roads lca 或者 树链剖分
They say that Berland has exactly two problems, fools and roads. Besides, Berland has n cities, popu ...
- 为什么学习html5
html5 2010年正式推出 新的web时代 优势: 1,跨平台运行 PC MAC LINUX 手机 PAD 2,硬件要求低 3,flash之外的选择 h ...
- JAVA while循环,do-while循环,for循环
一.while循环 实例: public class Test{ public static void main(String[] args){ int i = 1; while(i<30){ ...
- PHP每日签到时怎么实现
以淘宝网领取淘金币的签到系统为例:目标:第一天签到增加5个积分:第二天连续签到则增加8个积分:第三天连续签到,增加11个积分,第 四天连续签到,增加15个积分:第五天连续签到,增加19个积分:第六天连 ...
- 十一、jdk命令之Jstatd命令(Java Statistics Monitoring Daemon)
目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...
- ISO14229系列之一:简介
作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍 ...