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才引入的. 这三个类有什么区别呢?他们的使用 ...
随机推荐
- Java 向上转型
向上转型: 对象的向上转型,其实就是多态写法: 父类名称 对象名 = new 子类名称(); 注意:向上转型一定是安全的,从小范围转向大范围.(从小范围的猫,向上转化为更大范围的动物)
- Flutter statecontroller.update(MaterialState.disabled,false)无效
因为中间会调用 void initStatesController() { if (widget.statesController == null) { internalStatesControlle ...
- msyql查询各部门性别人数,如果某个部门没有男生或女生则用0代替
根据部门或者班级查询男女各多少人,可以直接使用: select org_code as orgCode, sex, count(*) as totalCount from blade_student ...
- 像MIUI一样做Zabbix二次开发(4)——乐维监控定制Zabbix的方法
做监控源于我们早期做运维服务的必然需求,我们的愿望是基于Zabbix这个强大开源平台,结合实际一线运维工作的需要+ITIL等运维理论,做成类似MIUI一样的开发.易用.实用.人性和美观的全新的监控平台 ...
- Finance财务软件(支持Excel模板打印专题)
我们可以修改模板文件./service/PrintTemplate/凭证打印模板_v1.xlsx 模板中的字段对应 2010_upgrade_01.sql 中的存储过程sp_voucher_print ...
- python面向对象--类的刨析
编程日常::::#编程就是程序员用特定的语法加数据结构加算法在计算机上执行过程,方式有很多种,最常用的就是面向对象编程和面向过程编程#设计思路一开始解决一个大问题,然后把大问题分解成小问题,一步步解决 ...
- D2-Net: Weakly-Supervised Action Localization via Discriminative Embeddings and Denoised Activations概述
1.针对的问题 目前大多数弱监督动作定位方法通常依赖于分离前景和背景区域(前-背景分离)学习TCAMs,但是在弱监督设置下,学习到的TCAM会存在噪声,而这些方法并没有明确地处理其噪声输出. 2.主要 ...
- ICPC2020上海B - Mine Sweeper II
思维 [B-Mine Sweeper II_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海)(重现赛)@hzy0227 (nowcoder.com)](https://codeforc ...
- mac系统yarn使用报错:ERROR: add is not COMMAND nor fully qualified CLASSNAME.
出现错误的过程: mac 系统上使用阿里的X6(@antv/x6) x6 快速上手: 1 npm install @antv/x6 --save 2 yarn add @antv/x6 ...
- PHP基础教程(二)
本部分列出了在 PHP 中使用的各种运算符:算数运算符 运算符 说明 例子 结果 + Addition x=2x+2 4 - Subtraction x=25-x 3 * Multiplication ...