[转帖]String、StringBuilder与StringBuffer
String、StringBuilder与StringBuffer
https://www.jianshu.com/p/37f3799bdb56
1.String
String本质
String是不可变的,他的实质是被final修饰过的char数组。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
String方法
| 编号 | 方法 | 说明 |
|---|---|---|
| 1 | char charAt(int index) | 返回指定索引处的 char 值。 |
| 2 | int compareTo(String anotherString) | 按字典顺序比较两个字符串。 |
| 3 | boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束。 |
| 4 | byte[] getBytes() | 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
| 5 | int length() | 返回此字符串的长度。 |
| 6 | boolean matches(String regex) | 告知此字符串是否匹配给定的正则表达式。 |
| 7 | String replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
| 8 | String[] split(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
| 9 | String substring(int beginIndex) | 返回一个新的字符串,它是此字符串的一个子字符串。 |
| 10 | char[] toCharArray() | 将此字符串转换为一个新的字符数组。 |
| 11 | String trim() | 返回字符串的副本,忽略前导空白和尾部空白。 |
有关String的面试题
String s1 = "abc"; // 常量池
String s2 = new String("abc"); // 堆内存中
System.out.println(s1==s2); // false两个对象的地址值不一样。
System.out.println(s1.equals(s2)); // true
2.StringBuilder与StringBuffer
简短介绍
String:字符串常量,字符串长度不可变。用于存放字符的数组被声明为final。
StringBuffer:字符串变量(Synchronized,即线程安全)。可将字符串缓冲区安全地用于多个线程。
StringBuilder:字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。
使用选择
- 如果要操作少量的数据用 String,大量操作使用StringBuffer 和 StringBuilder 是因为能够被多次的修改,并且不产生新的未使用对象。
- 单线程大量操作数据用StringBuilder,它的速度大于StringBuffer。
- 多线程大量操作数据用StringBuffer,但是stringbuffer 的线程安全,仅仅是保证 jvm 不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确,所以并不常用。
StringBuilder操作小案例
StringBuildera=newStringBuilder("");
a.append("i'm a good boy");//附加
System.out.println(a.toString());
a=a.reverse();//翻转
System.out.println(a.toString());
a.delete(0,1);//删除
System.out.println(a.toString());
a.insert(0,"ha");//插入
System.out.println(a.toString());
a.replace(1,2,"666");//替换
System.out.println(a.toString());
对应结果
i'm a good boy
yob doog a m'i
ob doog a m'i
haob doog a m'i
h666ob doog a m'i
[转帖]String、StringBuilder与StringBuffer的更多相关文章
- String StringBuilder以及StringBuffer
例一:[看了威哥视频,下面更好理解] package sunjava; public class String_test { public static void main(String[] args ...
- String, StringBuilder 与StringBuffer的区别与联系
1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBu ...
- Java中String, StringBuilder和StringBuffer
Java中常用来处理字符串的类有三个: String, StringBuffer和StringBuilder. 区别 三者都继承自CharSequence接口, 首先说明三者间主要区别 String字 ...
- String,StringBuilder和StringBuffer的特点和使用场景
这三个类是平时开发中经常遇到的,主要差别是运行速度和线程安全,使用起来String最方便了,另外两个稍微复杂一些. 从运行速度角度看,StringBuilder>StringBuffer> ...
- java String,StringBuilder和StringBuffer
String:1.java语言中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但java一般使用Sting类作为字符串的标准格式,java编译器把字符串值作为String对象. ...
- String,StringBuilder与StringBuffer的区别
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- Java基础学习总结(65)——Java中的String,StringBuilder和StringBuffer比较
字符串,就是一系列字符的集合. Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串,其中StringBuilder类是到jdk 1.5才新增的.字符 ...
- String,StringBuilder和StringBuffer
String 字符串常量,由String创建的字符内容,长度是不可改变,存放字符的数组被声明为final. 实际上String类操作字符串是通过建立一个StringBuffer,然后调用append( ...
- java 常用类库:String ; StringBuilder和StringBuffer类
1. String 1.String对象是不可变的 String类的value属性是用来存放字符串里面的值的.这个属性是被final修饰的.final修饰的变量不能够被第二次赋值,所以字符串是不可变的 ...
- String,StringBuilder 和StringBuffer区别
1. String 和字符串缓冲区的区别是: String 是一个不可变的字符序列 , 而字符串缓冲区是可变的 2. StringBuffer 是一个线程安全的可变字符序列 ; 线程安全对应的效率低 ...
随机推荐
- Redis安装和基本使用
目录 Redis安装和基本使用 安装 配置 启动服务端 启动客户端 Redis键(key) 与键相关的基本命令 Redis字符串 常用字符串命令: Redis哈希 常用Hash命令 Redis 列表( ...
- javascript中的12种循环遍历方法1
1:for循环 let arr = [1,2,3]; for(let i =0;i<arr.length;i++){ console.log(i,arr[i]) } //for循环是js中最常用 ...
- 小程序自定义tabbar custom-tab-bar 6s出不来解决方案,cover-view不兼容
1.从微信小程序的官网扣下来的demo,实际测试中,发现6s ios10 系统不兼容,里面的内容出不来 <cover-view class="tab-bar"> < ...
- echarts 折线图百分比 tooltip 实例 两种方法
方法一 在知道有几个类型时:下面有五个类型 tooltip : { show : true, trigger: 'axis', formatter: '{b0}<br/>{a0}: {c0 ...
- 选美?作秀?MES系统的选择更应该从实际出发
MES选型不是做秀,不是选美. 如今不少企业在信息化推广应用过程中面面求好.追求完美,用意没错,然而在MES开发过程中,软件商不可能将今后各种可能出现的问题考虑周全,不可能将系统做到十全十美.随着系统 ...
- 路由拨号上网过Drcom
学校校园宽带是Drcom认证的 ,一人一号一设备.用着难受就决定想破解. 开始想着用软路由,但是感觉对电脑不友好,所以就决定买个路由器来搞. 一丶环境说明 学校使用的是Drcom 6.0 P版客户端. ...
- kubernetes学习控制器之StatefulSet控制器
StatefulSet介绍 一.StatefulSet概述 StatefulSet是用来管理stateful(有状态)应用的StatefulSet管理Pod时,确保Pod有一个按序增长的ID与Depl ...
- Hyper-v,装XP的时候没有驱动上不了网,装这个集成服务(vmguest.iso )就可以了
Win10自带的Hyper-v,装XP的时候没有驱动上不了网,装这个集成服务(vmguest.iso )就可以了 安装后无法识别显卡及网卡设备,不能与虚拟网络通讯,设备管理器中显示三个未知设备. 在X ...
- 在eclipse中使用Maven分模块搭建SSM框架,创建jar、war、pom工程模块教学,项目的热部署,需要的可以留下邮箱,给大家发整理过的Maven笔记
第一章:Maven概述 (1)Maven是一个项目构建工具,由apache提供,用Java开发的 (2)构建工具:Ant(蚂蚁),Maven(专家) (3)构建工具作用:帮助程序员进行项目的创建,目录 ...
- asp.net Server.Transfer
页面跳转传参. 如果不是通用的跳转可以通过,在原始页面定义对象保存数据 跳转的目标页面可以: SourcePage page=(SourcePage)Context.Handler; //获取源页面的 ...