String与StringBuild和StringBuffer的使用

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());

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/84219912
今日推荐