String problem and StringBuilder
一、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相关推荐
- 【Java5】String类,StringBuilder类,ArrayList类,Object类(toString,equals,hashCode)
文章目录 1.String类:字符串常量在Java中不属于基本数据类型, 而是引用/类类型 1.1 使用:new String(...) 1.2 判断:equals函数是用来比较两个对象是否相等 1. ...
- String,StringBuffer与StringBuilder的区别
String,StringBuffer与StringBuilder的区别 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全 ...
- Java中string拼接,StringBuilder,StringBuffer和+
Java中string拼接,StringBuilder,StringBuffer和+,到底哪个更合适? StringBuilder线程不安全,效率较线程安全的StringBuffer高.jdk1.5之 ...
- 2021ICPC(沈阳) - String Problem(后缀树+贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,对于每个前缀来说,求出字典序最大的子串. 题目分析:看到子串的字典序,感觉能用后缀树来做,参考了一下大佬的赛上代码: 香港中文大 ...
- hdu 5008 Boring String Problem(后缀数组+rmq)
题目链接:hdu 5008 Boring String Problem 题意: 给你一个字符串,有q个询问,每次询问该字符串所有的子串中字典序第k小的是哪个串,输出位置,如果有多个位置,输出最靠左的那 ...
- String、String Buffer、StringBuilder区别与比较
类型 常量/变量 适用场景 性能 String 字符串常量 操作少量的数据 String Buffer 字符串变量(线程安全) 多线程操作大量数据 低 String Builder 字符串变量(非 ...
- String.Format和StringBuilder的效率
到底String.Format还是StringBuilder效率更高一点?至于这个问题, 直接叫他用强大的武器Reflector了解一下String.Format的方法. 结果他很快就找出相关的代码: ...
- 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 ...
- HDU 5008 Boring String Problem ( 后缀数组求本质不同第k大子串)
Boring String Problem Zeronera题解 预处理sum数组记录不同字符串的个数,即sum[i] = n- sa[i] + 1 -height[i] + sum[i-1] (n为 ...
最新文章
- java矩形碰撞检测_旋转矩形的Java碰撞检测?
- struts2 标签的使用之二 s:iterator
- 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限...
- js Date 对象用于处理日期和时间。
- python 找到两个排序数组的中位数_Python查找两个有序列表中位数的方法【基于归并算法】...
- python 熊猫,Python熊猫
- 查询已有链表的hashmap_面试官再问你 HashMap 底层原理,就把这篇文章甩给他看...
- 《深入理解分布式事务》第九章 可靠消息最终一致性分布式事务原理
- 高通 AI、5G 争夺战!
- 【数学建模】基于matlab GUI模拟冰山运输系统(参数可调)【含Matlab源码 895期】
- 网络配置_Linux CentOS怎么配置网络
- 微信小程序如何跳转视频号直播间
- 什么是可加,半可加,不可加事实?
- wps页眉显示一级标题_WPS教程--排版和打印--页眉和页脚
- javafx设置图片透明度(饱和度,亮度同理)
- 解决Google 云端硬盘,文件下载问题
- 【题解】纪中篮球联赛
- 学习自旋电子学的笔记01:微磁模拟软件OOMMF的教程(中文版)7.3.5-9章
- telnet 正在连接127.0.0.1:8888...无法打开到主机的连接。 在端口 23: 连接失败
- python 欠采样_欠采样-Python数据科学技术详解与商业项目实战精讲 - python自学网...
热门文章
- VS2010安装与环境配置
- ziRail 0.71 for Maya2018-2020,maya拓扑的神兵利器
- 浙江理工大学传播学转计算机,恒心是考研马拉松最强大的武器 | 浙江理工大学新传考研经验贴...
- java。00.上册笔试
- Kotlin定时器CountDownTimer
- 划区清扫功能 小米扫地机器人_小米扫地机器人再升级 水洗滤网可反复利用
- Python图算法之深度优先搜索
- mysql 初始化配置文件_怎么配置mysql初始化化配置文件
- 平行志愿计算机录取顺序,平行志愿专业录取顺序及填报技巧
- 【Codewars】7×7 摩天大楼