一、String存在的问题

Java开辟了两类存储区域,分别是栈和堆:

存储区域 存储内容 优点 缺点 回收
基本类型的变量和对象的引用变量 存取速度比堆要快,仅次于寄存器,栈数据可以共享 存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量 当超过变量的作用域后,Java会自动释放掉该变量,内存空间可以立即被另作他用
由new等指令创建的对象和数组 可以动态地分配内存大小,生存期也不必事先告诉编译器 由于要在运行时动态分配内存,存取速度较慢 由Java虚拟机的自动垃圾回收器来回收不再使用的数据

我们在学习前需要先了解Java对象和引用变量,这更有利于之后理解String中存在的问题

请记住,String类是不可改变的,一旦创建String对象,那它的值就无法改变了

此处我们创建两个变量str1和str2,

将其相加后,并非更改了原本引用变量str1指向的堆中String对象内容,

而是重新开辟了一块新空间,用来存放相加后的“HelloWorld”内容,

并将原本指向“Hello”空间的引用变量str1(指针)指向了“HelloWorld”这块空间。

此时原本str1指向的那块空间“Hello”并没有被销毁,

而是在一段时间后由垃圾回收机制自动进行处理,

如果我们需要对很多字符串进行频繁操作的时候,

这种模式下在单位时间内显然是十分耗费内存空间

二、StringBuilder以及链式调用

为解决上面提出的问题,可以使用StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 的方法不是线程安全的(不能同步访问),

但StringBuilder 相较于 StringBuffer 有速度优势,

所以多数情况下建议使用 StringBuilder 类。

尝试使用StringBuilder:
(引用菜鸟教程中例子,其实质是操作一个线性表)

public class RunoobTest{public static void main(String args[]){StringBuilder sb = new StringBuilder(10);sb.append("Runoob..");System.out.println(sb);  sb.append("!");System.out.println(sb); sb.insert(8, "Java");System.out.println(sb); sb.delete(5,8);System.out.println(sb);  }
}

自己写一个例子:

package com.google.study.string;import org.junit.Test;public class StringBuilderTest {@Testpublic void demo(){StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("Hello");stringBuilder.append(" world");System.out.println(stringBuilder);}
}

String problem and StringBuilder相关推荐

  1. 【Java5】String类,StringBuilder类,ArrayList类,Object类(toString,equals,hashCode)

    文章目录 1.String类:字符串常量在Java中不属于基本数据类型, 而是引用/类类型 1.1 使用:new String(...) 1.2 判断:equals函数是用来比较两个对象是否相等 1. ...

  2. String,StringBuffer与StringBuilder的区别

    String,StringBuffer与StringBuilder的区别 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全 ...

  3. Java中string拼接,StringBuilder,StringBuffer和+

    Java中string拼接,StringBuilder,StringBuffer和+,到底哪个更合适? StringBuilder线程不安全,效率较线程安全的StringBuffer高.jdk1.5之 ...

  4. 2021ICPC(沈阳) - String Problem(后缀树+贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,对于每个前缀来说,求出字典序最大的子串. 题目分析:看到子串的字典序,感觉能用后缀树来做,参考了一下大佬的赛上代码: 香港中文大 ...

  5. hdu 5008 Boring String Problem(后缀数组+rmq)

    题目链接:hdu 5008 Boring String Problem 题意: 给你一个字符串,有q个询问,每次询问该字符串所有的子串中字典序第k小的是哪个串,输出位置,如果有多个位置,输出最靠左的那 ...

  6. String、String Buffer、StringBuilder区别与比较

    类型 常量/变量 适用场景 性能 String 字符串常量 操作少量的数据   String Buffer 字符串变量(线程安全) 多线程操作大量数据 低 String Builder 字符串变量(非 ...

  7. String.Format和StringBuilder的效率

    到底String.Format还是StringBuilder效率更高一点?至于这个问题, 直接叫他用强大的武器Reflector了解一下String.Format的方法. 结果他很快就找出相关的代码: ...

  8. Problem M. Mediocre String Problem(Z 函数 + PAM)

    Problem M. Mediocre String Problem 给定两个串s,ts, ts,t,要求有多少不同的三元组(i,j,k)(i, j, k)(i,j,k),满足: 1≤i≤j≤∣s∣1 ...

  9. HDU 5008 Boring String Problem ( 后缀数组求本质不同第k大子串)

    Boring String Problem Zeronera题解 预处理sum数组记录不同字符串的个数,即sum[i] = n- sa[i] + 1 -height[i] + sum[i-1] (n为 ...

最新文章

  1. java矩形碰撞检测_旋转矩形的Java碰撞检测?
  2. struts2 标签的使用之二 s:iterator
  3. 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限...
  4. js Date 对象用于处理日期和时间。
  5. python 找到两个排序数组的中位数_Python查找两个有序列表中位数的方法【基于归并算法】...
  6. python 熊猫,Python熊猫
  7. 查询已有链表的hashmap_面试官再问你 HashMap 底层原理,就把这篇文章甩给他看...
  8. 《深入理解分布式事务》第九章 可靠消息最终一致性分布式事务原理
  9. 高通 AI、5G 争夺战!
  10. 【数学建模】基于matlab GUI模拟冰山运输系统(参数可调)【含Matlab源码 895期】
  11. 网络配置_Linux CentOS怎么配置网络
  12. 微信小程序如何跳转视频号直播间
  13. 什么是可加,半可加,不可加事实?
  14. wps页眉显示一级标题_WPS教程--排版和打印--页眉和页脚
  15. javafx设置图片透明度(饱和度,亮度同理)
  16. 解决Google 云端硬盘,文件下载问题
  17. 【题解】纪中篮球联赛
  18. 学习自旋电子学的笔记01:微磁模拟软件OOMMF的教程(中文版)7.3.5-9章
  19. telnet 正在连接127.0.0.1:8888...无法打开到主机的连接。 在端口 23: 连接失败
  20. python 欠采样_欠采样-Python数据科学技术详解与商业项目实战精讲 - python自学网...

热门文章

  1. VS2010安装与环境配置
  2. ziRail 0.71 for Maya2018-2020,maya拓扑的神兵利器
  3. 浙江理工大学传播学转计算机,恒心是考研马拉松最强大的武器 | 浙江理工大学新传考研经验贴...
  4. java。00.上册笔试
  5. Kotlin定时器CountDownTimer
  6. 划区清扫功能 小米扫地机器人_小米扫地机器人再升级 水洗滤网可反复利用
  7. Python图算法之深度优先搜索
  8. mysql 初始化配置文件_怎么配置mysql初始化化配置文件
  9. 平行志愿计算机录取顺序,平行志愿专业录取顺序及填报技巧
  10. 【Codewars】7×7 摩天大楼