网站突然排名没了,网站建设中网站需求分析和报告工能论文,南昌做网站开发的公司哪家好,外贸网站有什么1、字符串缓冲区
理解#xff1a;Java内存层面的一款容器(crud操作)
引入场景#xff1a; 根据需求需要对某字符串内容进行频繁的改动操作#xff0c; 如果使用String类原生的方式进行处理#xff0c;则会在内存中产生大量的对象#xff1b; 面临的问题Java内存层面的一款容器(crud操作)
引入场景 根据需求需要对某字符串内容进行频繁的改动操作 如果使用String类原生的方式进行处理则会在内存中产生大量的对象 面临的问题内存压力剧增、程序的效率变低 此时Java设计者提出了字符串缓冲区这种技术就是用来解决上述的问题
作用/价值 对于字符串内容的频繁改动操作自始至终不会产生新对象
类型
1、java.lang.StringBuffer类 2、java.lang.StringBuilder类 【区别】StringBuffer和StringBuilder的区别
都用于描述字符串缓冲区并且是等价类兼容api所有api名字都相同
StringBuffer类 jdk1.0就存在(古老) 实行了同步意味着是线程安全的类效率低
StringBuilder类 jdk1.5版本才出现(较新) 没有实行同步意味着是线程不安全的类效率高 常用构造方法
StringBuilder() 构造一个不带任何字符的字符串生成器其初始容量为 16 个字符。 StringBuilder(int capacity) 构造一个不带任何字符的字符串生成器其初始容量由 capacity 参数指定。 StringBuilder(String str) 构造一个字符串生成器并初始化为指定的字符串内容。 2、常用方法因为两个类的api名完全一样下面只以StringBuilder为例使用它的机率更大
/*1、增操作appendinsert
*/
sb.append(abc).append(123).append(3.14).append(true);
sb.insert(5, java);/*2、删操作deletedeleteCharAt
*/
sb.delete(5, 8); //含头不含尾
sb.deleteCharAt(5);/*2、改操作reversesetCharAtsetLength
*/
sb.reverse();
sb.setCharAt(5, W);
sb.setLength(10); //将容量设为10
3、为了比较String、StringBuilder、StringBuffer的性能与空间使用率需要讲一个拓展
System类 static long currentTimeMillis()返回以毫秒为单位的当前时间。 解析方法: 得到1970年1月1日0点0分0秒至这一刻的毫秒数 称为Unix时间戳
Runtime类 static Runtime getRuntime()返回与当前 Java 应用程序相关的运行时对象。 long totalMemory()返回 Java 虚拟机中的内存总量。 long freeMemory()返回 Java 虚拟机中的空闲内存量。
然后下面代码比较性能
public class TestSB_2 {public static void main(String[] args) {
// testString(); //String类耗时5664 String类占用内存315650056
// testStringBuffer(); //StringBuffer类耗时20 StringBuffer类占用内存5748280testStringBuilder(); //StringBuilder类耗时16 StringBuilder类占用内存5748416}public static void testString() {//记录当前时间long start System.currentTimeMillis();String str ;for (int i 1;i 100000;i) {str i;}//记录当前时间long end System.currentTimeMillis();System.out.println(String类耗时 (end - start));Runtime rt Runtime.getRuntime();System.out.println(String类占用内存 (rt.totalMemory() - rt.freeMemory()));}public static void testStringBuffer() {//记录当前时间long start System.currentTimeMillis();StringBuffer sb new StringBuffer();for (int i 1;i 100000;i) {sb.append(i);}//记录当前时间long end System.currentTimeMillis();System.out.println(StringBuffer类耗时 (end - start));Runtime rt Runtime.getRuntime();System.out.println(StringBuffer类占用内存 (rt.totalMemory() - rt.freeMemory()));}public static void testStringBuilder() {//记录当前时间long start System.currentTimeMillis();StringBuilder sb new StringBuilder();for (int i 1;i 100000;i) {sb.append(i);}//记录当前时间long end System.currentTimeMillis();System.out.println(StringBuilder类耗时 (end - start));Runtime rt Runtime.getRuntime();System.out.println(StringBuilder类占用内存 (rt.totalMemory() - rt.freeMemory()));}
} 本电子书目录《Java基础的重点知识点全集》