String类 |StringBuffer类 | StringBuilder类

String类 |StringBuffer类 | StringBuilder类,第1张

String类 |StringBuffer类 | StringBuilder类 一:String类

【常用构造方式】

public static void main(String[] args) {
 // 使用常量串构造
 String s1 = "hello bit";
 System.out.println(s1);

 // 直接newString对象
 String s2 = new String("hello bit");
 System.out.println(s1);

 // 使用字符数组进行构造
 char[] array = {'h','e','l','l','o','b','i','t'};
 String s3 = new String(array);
 System.out.println(s1);
}

 【图解】

 【注意】

1)字符字符使用unicode编码,一个字符占2个字节

2)String是final类,不能被其它类继承

3)String是引用类型,内部并不存储字符串本身,字符串具体的内容存储在对象中,而字符串引用类型变量存储的是对象的地址。

public static void main(String[] args) {
 // s1和s2引用的是不同对象 s1和s3引用的是同一对象
 String s1 = new String("hello");
 String s2 = new String("world");
 String s3 = s1;
}

一道测试题:

public class Test2 {
    public static void main(String[] args) {
        String s1="hap";
        String s2="java";
        String s4="java";
        String s3=new String("java");
        System.out.println(s2==s3);//F s3创建了一个新对象
        System.out.println(s2==s4);//T s2和s4都指向常量池中的“Java”
        System.out.println(s2.equals(s3));// T 比较的是内容,都为“java"
        System.out.println(s1==s2);//F 是常量池中不同的两个
    }

【常见方法】

  • equals比较内容是否相同,区分大小写
  • equalsIgnoreCase忽略大小写判断内容是否相同
  • length获取字符串的长度,字符的个数
  • indexof获取字符在字符串对象中第一次出现的索引,索引从0开始,找不到则返回-1
  • lastindexof获取最后一次出现的索引,找不到则返回-1
  • substring截取指定范围的子串
  • compareTo比较2个字符串的大小,前大返回正数,后大返回负数,相等返回0
  • toCharArray转为字符
  • toUpperCase/toLowewrCase
  • concat拼接字符
  • replace替换字符串中的字符
  • split分割字符串(在对字符串进行分割时,如有特殊字符需要加入转义符\ )
  • format格式字符串
  • toCharArray转换为字符数组
  String s="happy";
        char[] chs=s.toCharArray();
        for(int i=0;i 
二:StringBuffer类 

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuffer和StringBuilder类。

【对比】

1)String保存的是字符串常量,里面的值不能修改,每次更新实际更新的是地址,效率低

   private final char value[ ];

2)StringBuffer保存的是字符串常量,里面的值可以更改,每次更新的实际是内容,效率高

   char[ ] value;

【构造器的使用】

1)创建一个大小为16的char[ ],用于存放字符内容

StringBuffer stringBuffer = new StringBuffer();

2)通过构造器指定char[ ]大小

StringBuffer stringBuffer = new StringBuffer(100);

3)通过给一个String创建StringBuffer,char[ ]的大小就是str.length+16;

StringBuffer hello = new StringBuffer("hello");

【常用方法】

1)增:append

2)删:delect

3)改:repleace

4)查:indexOf (找第一次出现的索引,找不到返回-1)

5)插:insert

6)长度:length

三:StringBuilder类

【对比】

1)String:不可变字符序列,效率低,但复用率高

2)StringBuffer:可变字符序列,效率较高,线程安全

3)StringBuilder:可变字符序列,效率最高,线程不安全

String,StringBuffer,StringBuilder非常类似,均代表可变序列,且方法一样

效率:StringBuider>StringBuffer>String

【使用原则】

1)如果字符串存在大量修改,则一般用StringBuffer或StringBuilder

2)如果存在大量修改且在单线程——StringBuilder

3)如果存在大量修改且在多线程——StringBuffer

4)修改很少并被多个对象引用——String 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4671997.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存