[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是对象且为不可变对 ...
随机推荐
- 一. Logback与p6spy
一. LogBack配置 配置pom.xml <dependency> <groupId>org.slf4j</groupId> <artifactId> ...
- 内存修改console
#include <stdio.h> #include <windows.h> #include <winuser.h> int main() { int cur_ ...
- spark RDD transformation与action函数整理
1.创建RDD val lines = sc.parallelize(List("pandas","i like pandas")) 2.加载本地文件到RDD ...
- [MySQL] 常用SQL的优化--18.4
这里介绍下,Insert.Group By等SQL语句的优化方法: 1.大批量数据插入 当load命令导入数据的时候,可以进行适当的设置提高导入速度. 1.1 对于MyISAM表,可以先禁用非唯一索引 ...
- uboot 的内存命令使用 mw (修改) md (显示)
修改:mw [内存地址] [值] [长度] 例如:mw 0x02000000 0 128 表示修改地址为0x02000000~0x02000000+128的内存值为0. 显示:md [内存地址] [长 ...
- jsp的一些基本语法
jsp页面内容 <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...
- bootstrap-响应式图片、辅助类样式
响应式图片: <div class="container"> <!-- img-responsive 响应式图片 --> <div class=&qu ...
- quartz定时任务时间设置描述
这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , ...
- MYSQL C API : mysql_real_query()
enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, MYSQ ...
- java的新窗体
1.JFrame窗体 jf.setSize(200, 150); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); ...