String与StringBuild和StringBuffer的使用
首先说String,我们说String是不可改变的字符串,原因我们会说他是final修饰,所以不可变。
在Java中,String是一个引用类型,但是在作为参数传递的时候表现出来的却是基本类型的特性,即在方法中改变了String类型的变量的值后,不会影响方法外的String变量的值。
每次对String进行改变的时候进行都要创建一个新的对象,然后将指引指向该新的对象,而原来的对象在堆区中不会被销毁,原来对象中的内容会存放在堆中的常量池中。
对String类型的对象操作,等同于重新生成一个新对象,然后讲引用指向它;
public static void main(String[] args) {
String str="123";
str+="abc";
System.out.println(str);
}
StringBuffer和StringBuilder在修改字符串的时候,是在栈区中完成的,不会创建对象。
StringBuffer:对StringBuffer类型的对象操作,操作的始终是同一个对象;
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("123");
sb.append("abc");
System.out.println(sb.toString());
}
假如定义的字符串内容基本不变或者很少变化,用String效率高;假如定义的字符串内容经常变动,要用StringBuffer;
StringBuffer和 StringBuilder
二者的区别主要是在运行速度和线程安全这两方面。
1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的
2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低。
4、在执行速度方面的比较:StringBuilder > StringBuffer
总结 :
1.如果要操作少量的数据用 String
2.单线程操作字符串缓冲区 下操作大量数据 StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 StringBuffer
StringBuild 通过append拼接字符串
StringBuilder bankval=new StringBuilder();
bankval.append(",").append("'"+bankId+"'");
bankval.append(",").append("'"+bankQueId+"'");
bankval.append(",").append("'"+mgtId+"'");
String bakval = bankval.toString();
String bakvalue = bakval.substring(1, bakval.length());
拼接的字符串有时候根据数据类型引号要自己手动加入
String pointIdNum = "'"+IDNumber+"'";
upRoleSql = "UPDATE CT_USER SET ROLE_ID="+"'5afd389c10174e21af1680dd9f79f049'"+ "where ID_NUMBER="+pointIdNum;
StringBuffer拼接字符串
DateFormat dataFormat = new SimpleDateFormat("YYYY-MM-dd");
StringBuffer sql = new StringBuffer("SELECT * FROM Data AS pcd WHERE pcd.type=2");
sql.append(" and pcd.ID=?");
sql.append(" and (pcd.SJ BETWEEN ? AND ?)");
sql.append(" and pcd.X!=0 AND pcd.Y!=0");
List<Object> dataList = new ArrayList<Object>();
dataList.add(userId);
dataList.add(dataFormat.format(new Date())+" 00:00:00");
dataList.add(dataFormat.format(new Date())+" 23:59:59");
return this.querySqlObjects(sql.toString(),dataList);
拼接字符串
@RequestMapping (value="/user/showUserList")
public String showUserList(Model model,String ids){
String[] idsArray = ids.split(",");
if(ids!="") {
StringBuffer str = new StringBuffer();
for(int i=0;i<idsArray.length;i++) {
User user = userService.getUser(idsArray[i]);
if(null != user)
{
String name = user.getUserName();
str.append(name+',');
}
}
model.addAttribute("membersName", str);
}
if(ids=="") {
model.addAttribute("membersName", "");
}
model.addAttribute("members", ids);
return "select/user/showUserList";
}
StringBuffer转String
StringBuffer sb=new StringBuffer("123");
sb.append("abc");
System.out.println(sb.toString());