String StringBuffer StringBuilder

本文深入探讨了Java中的String类,强调其不可变性和内存管理。此外,还对比了String与StringBuffer的区别,解释了StringBuffer如何在多线程环境下确保安全以及常用的方法,如append、reverse和insert等。最后,列举并解析了String类的一些关键方法,如length、charAt和indexOf等。
摘要由CSDN通过智能技术生成

String源码分析

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence
{
    /** The value is used for character storage. */
    private final char value[];

    /** The offset is the first index of the storage that is used. */
    private final int offset;

    /** The count is the number of characters in the String. */
    private final int count;

    /** Cache the hash code for the string */
    private int hash; // Default to 0

    ........
}

1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。

2)String类其实是通过char数组来保存字符串的。

“String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”

String、StringBuffer、StringBuilder的区别

String中的对象是不可变的,也就可以理解为常量,显然线程安全

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象

使用 StringBuffer 类时,会对 StringBuffer 对象本身进行操作,而不是生成新的对象,StringBuffer 中的方法大都采用了synchronized 关键字进行修饰,因此是线程安全

StringBuilder 类在 Java 5 中被提出,是非线程安全

StringBuffer对象的创建:

1. 无参构造方法:无参构造方法创建一个可容纳16个字符的StringBuffer对象

StringBuffer sb = new StringBuffer();
2. 整型参数构造方法:创建一个可容纳参数长度字符的StringBuffer对象

StringBuffer sb = new StringBuffer(101); //创建一个可容纳101个字符的字符串
3. 以String对象作为参数的构造方法:可容纳长度为参数字符串长度,再加16 个字符

StringBuffer sb = new StringBuffer("abcde");

 以下是 StringBuffer 类支持的主要方法:

序号方法描述
1public StringBuffer append(String s)
将指定的字符串追加到此字符序列。
2public StringBuffer reverse()
 将此字符序列用其反转形式取代。
3public delete(int start, int end)
移除此序列的子字符串中的字符。
4public insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。
5insert(int offset, String str)
将 str 参数的字符串插入此序列中。
6replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。

StringBuilder对象的创建

public class RunoobTest{
    public static void main(String args[]){
        StringBuilder sb = new StringBuilder(10);
        sb.append("Runoob..");
        System.out.println(sb);  
        sb.append("!");
        System.out.println(sb); 
        sb.insert(8, "Java");
        System.out.println(sb); 
        sb.delete(5,8);
        System.out.println(sb);  
    }
}

String常用方法





1)length():获取字符串的长度,其实也就是字符个数

String str = "adsfaxsdfas沙发上案发地方";
System.out.println(str.length());

运行结果:
18

2)charAt(int index):获取指定索引处的字符

String str = "adsfaxsdfas沙发上案发地方";
		
char[] c = {'a','d','s','f','a'};
System.out.println(str.charAt(12));

运行结果:

3)indexOf(String str):获取str在字符串对象中第一次出现的索引

String str = "adsfaxsdfas沙发上案发地方";
System.out.println(str.indexOf('a',5));

运行结果:
9

4)String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end

String str = "adsfaxsdfas沙发上案发地方";
System.out.println(str.substring(1, 12));

运行结果:
dsfaxsdfas沙

String判断功能

1)equals(Object obj):比较字符串的内容是否相同

String str = "adsfaxsdfas沙发上案发地方";
System.out.println(str.equals("adsfaxsdfas沙发上发地方"));
System.out.println(str.equals("adsfaxsdfas"));

运行结果:
true
false

2)replace(char oldChar, char newChar):将指定字符替换成另一个指定的字符

String str = "adsfaxsdfas沙发上发地方";
System.out.println(str.replace('a', 's'));

运行结果:
sdsfsxsdfss沙发上发地方

3)replaceFirst(String regex,String replacement):替换首个满足条件的内容

String str = "adsfaxsdfas沙发上发地方";
System.out.println(str.replaceFirst("沙", "璇"));

运行结果:
adsfaxsdfas璇发上发地方

4)contains(CharSequence s):查看字符串中是都含有指定字符

String str4 = "Hello,world!";
System.out.println(str4.contains("l"));

运行结果:
true

5)concat(String str):在原有的字符串的基础上加上指定字符串

String str5 = "dr";
System.out.println(str5.concat("eam"));

运行结果:
dream

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值