Java中的StringBuffer

本文介绍了StringBuffer类与String类的区别,特别是在内存使用和线程安全性方面的不同。同时,通过一个实用的Java类示例展示了如何利用StringBuffer高效地构建JSON响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类,并且可以进行字符串的拼接;


String中的方法:


我们可以做为Json 方法抽取:

package cn.muuioo.utils;

import org.apache.commons.lang.StringUtils;



public class Response {

	/**
	 * Response 消息
	 */
	private String message;

	/**
	 * Response 状态码
	 */
	private String status;

	/**
	 * Response 数据
	 */
	private Object data;

	/**
	 * 通话令牌
	 */
	private String token;

	private String index;
	private String total;
	private String persize;
	private String totalPages;
	private String uuid;
	private String phoneVCode;

	/**
	 * public static void main(String[] args) {
	 * 
	 * Response re = new Response(); re.setData("data").setStatus("status");
	 * 
	 * List
   
   
    
     list = new ArrayList
    
    
     
     (); list.add(re);
	 * list.add(re);
	 * 
	 * String result =
	 * 
	 * Response.build().setStatus("200").setData(new Date()).toJSON();
	 * 
	 * System.out.println(result);
	 * 
	 * }
	 */

	public static Response build() {
		return new Response();
	}

	public String toJSON() {

		StringBuffer sb = new StringBuffer();
		sb.append("{");
		if (StringUtils.isNotBlank(this.status)) {
			sb.append("\"status\":\"").append(status).append("\",");
		}
		if (StringUtils.isNotBlank(this.message)) {
			sb.append("\"message\":\"").append(message).append("\",");
		}
		if (StringUtils.isNotBlank(this.token)) {
			sb.append("\"token\":\"").append(token).append("\",");
		}
		if (StringUtils.isNotBlank(this.uuid)) {
			sb.append("\"uuid\":\"").append(uuid).append("\",");
		}
		if (StringUtils.isNotBlank(this.phoneVCode)) {
			sb.append("\"phoneVCode\":\"").append(phoneVCode).append("\",");
		}
		if (this.data != null) {
			JsonMapper jm = new JsonMapper();
			sb.append("\"data\":").append(jm.toJson(data)).append(",");
		}
		if (StringUtils.isNotBlank(this.index)) {
			sb.append("\"index\":\"").append(index).append("\",");
		}
		if (StringUtils.isNotBlank(this.total)) {
			sb.append("\"total\":\"").append(total).append("\",");
		}
		if (StringUtils.isNotBlank(this.persize)) {
			sb.append("\"persize\":\"").append(persize).append("\",");
		}
		if (StringUtils.isNotBlank(this.totalPages)) {
			sb.append("\"totalPages\":\"").append(totalPages).append("\",");
		}

		sb.append("}");
		String result = sb.toString();
		if (result.lastIndexOf(",") == -1) {
			return result;
		}
		return result.substring(0, result.lastIndexOf(",")).concat(result.substring(result.lastIndexOf(",") + 1));
	}

	public String toJSON(String withEmptyStr) {
		StringBuffer sb = new StringBuffer();
		sb.append("{");

		if (StringUtils.isNotBlank(this.status)) {
			sb.append("\"status\":\"").append(status).append("\",");
		}
		if (StringUtils.isNotBlank(this.message)) {
			sb.append("\"message\":\"").append(message).append("\",");
		}
		if (StringUtils.isNotBlank(this.token)) {
			sb.append("\"token\":\"").append(token).append("\",");
		}
		if (StringUtils.isNotBlank(this.uuid)) {
			sb.append("\"uuid\":\"").append(uuid).append("\",");
		}
		if (StringUtils.isNotBlank(this.phoneVCode)) {
			sb.append("\"phoneVCode\":\"").append(phoneVCode).append("\",");
		}
		if (this.data != null) {
			JsonMapper jm = new JsonMapper();
			sb.append("\"data\":").append(jm.toJsonWithEmptyStr(data)).append(",");
		}
		if (StringUtils.isNotBlank(this.index)) {
			sb.append("\"index\":\"").append(index).append("\",");
		}
		if (StringUtils.isNotBlank(this.total)) {
			sb.append("\"total\":\"").append(total).append("\",");
		}
		if (StringUtils.isNotBlank(this.persize)) {
			sb.append("\"persize\":\"").append(persize).append("\",");
		}
		if (StringUtils.isNotBlank(this.totalPages)) {
			sb.append("\"totalPages\":\"").append(totalPages).append("\",");
		}

		sb.append("}");
		String result = sb.toString();
		return result.substring(0, result.lastIndexOf(",")).concat(result.substring(result.lastIndexOf(",") + 1));

	}

	public String getStatus() {
		return status;
	}

	public Response setStatus(String status) {
		this.status = status;
		return this;
	}

	public Object getData() {
		return data;
	}

	public Response setData(Object data) {
		this.data = data;
		return this;
	}

	public String getIndex() {
		return index;
	}

	public Response setIndex(String index) {
		this.index = index;
		return this;
	}

	public String getTotal() {
		return total;
	}

	public Response setTotal(String total) {
		this.total = total;
		return this;
	}

	public String getPersize() {
		return persize;
	}

	public Response setPersize(String persize) {
		this.persize = persize;
		return this;
	}

	public String getTotalPages() {
		return totalPages;
	}

	public Response setTotalPages(String totalPages) {
		this.totalPages = totalPages;
		return this;
	}

	public String getMessage() {
		return message;
	}

	public Response setMessage(String message) {
		this.message = message;
		return this;
	}

	public String getToken() {
		return token;
	}

	public Response setToken(String token) {
		this.token = token;
		return this;
	}

	public String getUuid() {
		return uuid;
	}

	public Response setUuid(String uuid) {
		this.uuid = uuid;
		return this;
	}

	public String getPhoneVCode() {
		return phoneVCode;
	}

	public Response setPhoneVCode(String phoneVCode) {
		this.phoneVCode = phoneVCode;
		return this;
	}

}

    
    
   
   
当我们做抽取的时候我们导入的StringUtils是org.apache.commons.lang.StringUtils中的;

StringBuffer和String的线程对比:

String是一次性的,一旦初始化后就不能改变String对象的值.除非指向另一个String对象.
所以不存在线程安全问题.
而StringBuffer对象可以在创建之后不断的改变.为了保证当前线程操作的StringBuffer不受其它线程影响,所以就把StringBuffer设计成了线程安全的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值