String类、StringBuffer类、StringBuilder类
String类、StringBuffer类、StringBuilder类
String类的创建
// 方式一 直接赋值
String s = "woshihaoren";
// 方式二 构造器创建
String ss = new String("woshihaoren");
// 方式一创建会先从常量池寻找。找到,直接指向;找不到,则重新创建。 s最终指向常量池的空间地址。
// 方式二创建会先在堆中创建空间,里面维护有value[]属性,并指向常量池的"woshihaoren"。如果常量池没有"woshihaoren",则重新创建,如果有直接通过value指向。 ss最终指向堆中的空间地址。
注:String类 是 final 类,不能被其他的类继承。
方式二创建的String类,有属性 private final char value[]; 用于存放字符串内容。
value 是一个 final 类型, 不可以修改:即 value 不能指向新的地址,但是单个字符内容是可以变化。
String类的方法
equals(): 是Object类中的方法,只能判断引用类型,默认判断的是地址是否相等。子类中(String类、包类等)往往重写改方法,用于判断内容是否相等。(区分大小写,判断内容是否相等)
注:
即 Object 的 equals 方法默认就是比较对象地址是否相同,也就是判断两个对象是不是同一个对象。
源码中 String 类、包类(Integer)等子类重写了 Object 的 equals 方法,变成了比较两个字符串值是否相同。
(String类比较过程:判断类型==>向下转型==>如果长度相同==>然后一个一个的比较字符==>如果两个字符串的所有字符都相等,返回true)
equalslongreCase(): 不区分大小写,判断内容是否相等。
length: 获取字符的个数,字符串的长度。
indexOf(): 获取字符在字符串中第一次出现的索引,找不到,返回-1。
lastIndexOf():获取字符在字符串中最后一次出现的索引,找不到,返回-1。
subString(): 截取指定范围的字符。
trim(): 去除前后空格。
charAt(): 获取某处索引的字符。 // str[index] 是错的
intern(): 最终返回的是常量池的地址(对象)。
toUpperCase(): 转大写。
toLowerCase(): 转小写。
cacat(): 连接。
replace(): 替换字符串的字符。
split(): 分割字符串。
compareTo(): 比较两个字符串的大小。
toCharArray(): 转为字符数组。
format(): 格式化字符串。 %s字符串 %c字符 %d整型 %2.f浮点型。
StringBuffer类
// 创建
StringBuffer stringBuffer = new StringBuffer("hello")
//StringBuffer 是一个 final 类,不能被继承
// 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)
// 不用每次都更换地址(即不是每次创建新对象), 所以效率高于 String类
String 和 StringBuffer 相互转换
// String ==> StringBuffer
String str = "hello";
// 方式 1 使用构造器
StringBuffer stringBuffer = new StringBuffer(str);
// 方式 2 使用的是 append 方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
// StringBuffer ==> String
StringBuffer stringBuffer3 = new StringBuffer(str);
//方式 1 使用 StringBuffer 提供的 toString 方法
String s = stringBuffer3.toString();
//方式 2: 使用构造器来搞定
String s1 = new String(stringBuffer3);
StringBuffer 类常见方法
StringBuffer s = new StringBuffer("hello")
// 增
s.append("赵敏").append(100).append(true).append(10.5);
System.out.println(s); // "hello赵敏100true10.5"
// 删
// 删除索引为 >=start && <end 处的字符 [a,b)
s.delete(11, 14);
System.out.println(s);//"hello赵敏10010.5"
// 改
// 使用 c 替换 索引 a和b之间 的字符 [a, b, c)
s.replace(6, 8, "周芷若");
System.out.println(s);//"hello周芷若true10.5"
// 插
// 在索引为 a 的位置插入 b,原来索引为 a 的内容自动后移 (a,b)
s.insert(6, "赵敏");
System.out.println(s);//"hello赵敏周芷若 true10.5"
StringBuilder类
// 创建
StringBuilder stringBuilder = new StringBuilder("hello")
//StringBuffer 是一个 final 类,不能被继承
// 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)
// 不用每次都更换地址(即不是每次创建新对象), 所以效率高于 String类。
// 适用于单线程中(StringBuilder不是线程安全)。
// StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用。
StringBuilder 类常见方法同[SringBuffer]
String、StringBuffer 和 StringBuilder 的比较
// StringBuffer和StringBuilder非常类似,均代表可变的字符序列,而且方法也一样
1、String: 不可变字符序列,效率低,但是复用率高。
2、StringBuffer: 可变字符序列、效率较高(增删)、线程安全。
3、StringBuilder: 可变字符序列、效率最高、线程不安全。
注意:
string s = "a"; // 创建一个字符串
s += "b" // s会丢弃了原来的"a"字符串,去产生新的字符串"ab"。会造成大量字符串对象留存内存中,降低效率。
结论:如果对字符串做大量修改,不要使用string类。
String Vs StringBuffer Vs StringBuilder 效率 : StringBuilder > StringBuffer > String
使用结论:
1、如果字符串存在大量的修改操作,一般使用StringBuffer和StringBuilder。
2、如果字符串存在大量的修改操作,并在单线程中的情况下,使用StringBuilder。
3、如果字符串存在大量的修改操作,并在多线程中的情况下,使用StringBuffer。
4、如果字符串很少修改,被多个对象引用,使用String,比如配置信息等。
String类、StringBuffer类、StringBuilder类的更多相关文章
- String、StringBuffer和StringBuilder类的区别
Java提供了String.StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法. 它们的相同点是都用来封装字符串:都实现了CharSequence接 ...
- JAVA String、StringBuffer、StringBuilder类解读
JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...
- 浅谈java中的String、StringBuffer、StringBuilder类的区别以及关系
在java中最常见的使用就是对字符串的操作:首先先说一下对字符串的理解:字符串就是一连串字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供一系列方法来操作字符串对 ...
- Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- Java笔记——String、StringBuffer和StringBuilder类
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符串序列是不可改变的,直至这个对象被销毁. StringBuffer对象则代表一个字符序列可变的字符串,当一个S ...
- Java ——String 类 StringBuffer 和 StringBuilder类 随机字符
本节重点思维导图 String 类 创建字符串 String str = "I love ai"; 在代码中遇到字符串常量时,"I love ai",编译器会使 ...
- 【JAVA中String、StringBuffer、StringBuilder类的使用】
一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: public class Strin ...
- 总结 String、StringBuffer与StringBuilder类中常用的方法
一.String类的常用方法 1.获取: 1)获取字符串str长度 int i = str.length(); 2)根据位置(index)获取字符 char c = str.charAt(index) ...
- StringBuffer和StringBuilder类
对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类(String类是不可改变的,一旦创建了String对象,那它的值就无法改变了). 和String类不同的是,St ...
- 深入了解String,StringBuffer和StringBuilder三个类的异同
Java提供了三个类,用于处理字符串,分别是String.StringBuffer和StringBuilder.其中StringBuilder是jdk1.5才引入的. 这三个类有什么区别呢?他们的使用 ...
随机推荐
- oracle学习之undo读一致性及undo表空间设置大小
1.一致性读和事务 一个事务开始以后,分配undo段头事务表和undo块,事务表指向undo块,数据块中有事务槽,底下有数据行,数据块事务槽中事务ID指向事务表,事务表指向undo块,数据块事务槽也指 ...
- luna lunatic
Luna是罗马神话的月神.英语中Lunacy.Lunatic等意指疯狂的字语源均来自Luna.月亮的阴晴圆缺影响地球的潮汐涨退甚至生物周期,故此古时的人们相信月亮拥有使人疯狂的魔力,人狼等传说亦是因此 ...
- 解决从PLSQL导出到CSV文件的时候提示 is not a valid date and time的问题
操作下面步骤的时候,报出[XXXXXis not a valid date and time]的错误 问题原因:以前嫌弃任务栏右下角的时间显示格式不好,手动手改了一下,导致Oracle的日期格式与现在 ...
- Eclipse创建maven-web项目时找不到archetype解决方法
转:https://blog.csdn.net/sunjinjuan/article/details/82943488
- C# Linq不同类型数组之间的转换
string[] strArray = "a,b,c,d,e,f,g".Split(new char[]{ ',' }); int[] intArray; //C# 3.0下用此句 ...
- view 相关代码片段笔记
代码中动态创建view,并把AttributeSet加入到当前自定义的view中,动态创建属性相关 //https://blog.csdn.net/chenhuakang/article/detail ...
- 整合mybatis-示例
引入依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...
- web server 接口调用测试
1.新建工程 ,鼠标右击new 2.设置web server接口访问链接,然后下一步 生成代码 3.生成客户端代码 4.创建测试类 调用服务
- docker 清除redis缓存
1.仓库容器id: docker ps 2.进入容器:docker exec -it 容器id redis-cli 3.清除所有缓存:flushall
- L2 Gracia Final OpCodz
[83] Gracia Final Client 00 SendLogOut 01 RequestAttack 03 RequestStartPledgeWar 04 RequestReplyStar ...