常用类库:String
发布日期:2021-06-27 12:55:53 浏览次数:51 分类:技术文章

本文共 1873 字,大约阅读时间需要 6 分钟。

文章目录

概述

String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。

字符串是不变的; 它们的值在创建后无法更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,所以可以共享它们。

由于String对象不变,当内容一样时,允许共享地址存储。当需要堆字符串做很多修改,那么应该使用StringBuffer & StringBuilder类

package Demo1;public class Demo5 {
public static void main(String[] args) {
String test1 = "123123"; String test2 = "123123"; System.out.println(test1 == test2); }}

运行结果:

在这里插入图片描述

创建字符串

String str = "hello";

在代码中遇到字符串常量时,这里的值是 “hello”",编译器会使用该值创建一个 String 对象

此外,也可以用关键字和构造方法来创建String对象

String str = new String("hello");

String创建的字符串存储在公共池中,而new创建的字符串对象在堆上

String 方法

方法 方法描述
char charAt(int index) 返回指定索引处的 char 值
int compareTo(Object o) 把这个字符串和另一个对象比较
int compareTo(String anotherString) 按字典顺序比较两个字符串
int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写
String concat(String str) 将指定字符串连接到此字符串的结尾
boolean contentEquals(StringBuffer sb) 当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真
static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String
boolean equals(Object anObject) 将此字符串与指定的对象比较
int hashCode() 返回此字符串的哈希码
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引
int length() 返回此字符串的长度
String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串

String 和StringBuilder、StringBuffer 的区别?

  1. 可变性
    a. String类中使用final关键字修饰字符数组来保存字符串,因此String对象是不可变的
    b. 而StringBuilder与StringBuffer继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,但是没有用final关键字修饰,因此这两种对象都是可变的
  2. 线程安全性
    a. String中的对象是不可变的,也就可以理解为常量,线程安全。
    b. StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以也是线程安全的,
    c. StringBuilder并没有对方法加同步锁,因此非线程安全。
  3. 性能
    a. 每次对String类型进行改变的时候,都会生成一个String对象,然后将指针指向新的String对象,
    b. StringBuffer灭磁都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。
    c. 在相同情况夏使用StringBuilder相比使用StringBuffer仅仅能获得10%~15%左右性能提示,但是却要冒多线程不安全的风险

总结:

  1. 操作少量数据,适用String
  2. 单线程操作字符串缓冲区下操作大量数据,适用StringBuilder
  3. 多线程操作字符串缓冲区下操作大量数据,适用 StringBuffer

转载地址:https://blog.csdn.net/weixin_43454088/article/details/116278073 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:链表与二叉树
下一篇:常用类库 java.util.Calendar

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月08日 00时07分13秒