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类的更多相关文章

  1. String、StringBuffer和StringBuilder类的区别

    Java提供了String.StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法. 它们的相同点是都用来封装字符串:都实现了CharSequence接 ...

  2. JAVA String、StringBuffer、StringBuilder类解读

    JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...

  3. 浅谈java中的String、StringBuffer、StringBuilder类的区别以及关系

    在java中最常见的使用就是对字符串的操作:首先先说一下对字符串的理解:字符串就是一连串字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供一系列方法来操作字符串对 ...

  4. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  5. Java笔记——String、StringBuffer和StringBuilder类

    String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符串序列是不可改变的,直至这个对象被销毁.   StringBuffer对象则代表一个字符序列可变的字符串,当一个S ...

  6. Java ——String 类 StringBuffer 和 StringBuilder类 随机字符

    本节重点思维导图 String 类 创建字符串 String str = "I love ai"; 在代码中遇到字符串常量时,"I love ai",编译器会使 ...

  7. 【JAVA中String、StringBuffer、StringBuilder类的使用】

    一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: public class Strin ...

  8. 总结 String、StringBuffer与StringBuilder类中常用的方法

    一.String类的常用方法 1.获取: 1)获取字符串str长度 int i = str.length(); 2)根据位置(index)获取字符 char c = str.charAt(index) ...

  9. StringBuffer和StringBuilder类

    对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类(String类是不可改变的,一旦创建了String对象,那它的值就无法改变了). 和String类不同的是,St ...

  10. 深入了解String,StringBuffer和StringBuilder三个类的异同

    Java提供了三个类,用于处理字符串,分别是String.StringBuffer和StringBuilder.其中StringBuilder是jdk1.5才引入的. 这三个类有什么区别呢?他们的使用 ...

随机推荐

  1. 关于osqp

    看了osqp的英文概要,记录如下: 1.采用交替方向乘子法 2.通过因式分解高速缓冲和热启动可以减少运算时间 3.适合嵌入式系统,实测mpc在10ms之内,路径规划在20ms左右(少障碍物),障碍物多 ...

  2. OA产品并发访问能力

    环境:cpu 16c,内存 32G,系统管理服务.jtportal服务 启动双实例样本:50线程,循环登录60次,共计3000次登录,用时3分钟40秒结论:平均每分钟支持800次登录,均在3秒左右.按 ...

  3. unity3d Time.deltaTime个人理解

    官方的解释是:静态只读属性,时间增量,渲染上一帧所花费的时间看下面的代码 /// <summary> /// 每帧刷新 /// </summary> void Update() ...

  4. Docker的资源限制

    CPU CGROUP MEM CGROUP Storage 默认的overlay fs不支持配额,需要底层文件系统如xfs,ext4的支持. 在docker中启用示例如下,限制单个容器最大使用空间为2 ...

  5. 面试题-react

    对react的理解 是什么 React 是一个用于构建用户界面的 JavaScript 库. 能干什么 可以通过组件化的方式构建大型的,快速响应的大型web应用 如何做 声明式 React 使用jsx ...

  6. 33. Java对异常处理的两种方式

    声明异常 throw: 关键字,用于抛出一个指定的异常对象 必须写在方法内部.必须是Exception或Exception的子类对象 throws: 用于方法声明上,表示当前方法不处理该异常,提醒调用 ...

  7. 4. Popup 弹出窗口

    1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...

  8. css盒子在不同浏览器下的差异

    标准盒子模型 盒子模型的氛围包括四个部分:margin,border,padding,content 标准盒子模型的content不包括其他内容,只有width跟height部分     conten ...

  9. ASP.NET Core3.1 中使用MongoDB基本操作

    1.安装驱动包 install-package MongoDB.Driver -version 2.11.7 2.配置文件帮助类 ConfigHelper public static class Co ...

  10. TypeScript String(字符串)

    TypeScript String(字符串) String 对象用于处理文本(字符串). 语法 var txt = new String("string"); 或者更简单方式: v ...