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才引入的. 这三个类有什么区别呢?他们的使用 ...
随机推荐
- 学习C语言哟
之前一直用的vs,感觉还不错,现在新发现了 一个Lightly工具,非常好用,各种环境自动配置好 看着新奇,比codeblocks好多了,各种玩意儿一大堆,不过也都行,只是这个安装轻松点 开始我的第二 ...
- CAD轴测图怎么画?快来试试浩辰CAD超级轴测命令!
很多新手设计师小伙伴,不知道CAD轴测图怎么画?其实很简单,浩辰CAD中的超级轴测功能,可以方便地将CAD平面图转化为轴侧图,是绘制管线系统图的好帮手.今天就和小编一起来看看在浩辰CAD软件中通过调用 ...
- AndroidStudio 集成kotlin,以及Kotlin-gradle-plugin-1.5.0.jar 下载失败
配置Kotlin buildscript { ext.kotlin_version = '1.5.0' repositories { maven{url 'http://maven.aliyun.co ...
- centos7升级内核 ,wireguard优化
一.centos7升级内核 uname -r 查看内核版本 升级前 升级后 参考链接: https://www.cnblogs.com/rick-zhang/p/14944510.html # 启用 ...
- Linux工作中最常用命令整理
ls 命令:显示指定工作目录下之内容 ls -a # 显示所有文件夹,包含隐藏的. 和.. ls -l # 显示文件的详细信息,包含文件形态,权限,所属,大小,其实就是平常用的 ll ll -h # ...
- Matchmaker Server 像素流送配对服务器
- uniapp 离开界面清除计时器
onLoad() { // APP启动引导图逻辑判断显示 if (uni.getStorageSync("startImgSt ...
- Java构造器详解
java 构造器详解 一个构造器即使什么都不写 ,他也会默认存在一个构造器. 构造器的作用; ①:使用new关键字.本质是在调用构造器 ②:用来初始化值 定义了一个有参构造之后,如果想使用无参构造,显 ...
- 使用Wireshark完成实验2-TCP
1.打开Google Chorme,进入https://gaia.cs.umass.edu/wireshark-labs/alice.txt 2.将文本保存,进入https://gaia.cs.uma ...
- 侠客行+越女剑 <随笔>
侠客行:自己提炼剧情是一个很费时费劲的事情,好在剽窃百度百科不算抄袭,而且也足够还原,红字为补充 一向平静祥和的小市镇侯监集上,忽然来了二百多名杀人不眨眼的强盗.镇上乡亲们都熟悉的卖饼老者王老汉,却被 ...