JAVA源码学习(一)——String类

本文详细探讨了Java中的String类,强调其不可变性,并通过源码分析解释了为何String类是不可变的。文章还介绍了常用的构造方法和字符串操作方法,如length()、equals()、replace()等,并探讨了正则表达式的使用和量词的概念。
摘要由CSDN通过智能技术生成

一、String类的不可变性

源码:

public final class String//final修饰类,不可继承
private final char value[];//String类实际返回值为final修饰的char数组,其对象内容

     1、测试数组char数组能否代替字符串

 public static void main(String[] args) {
        String str = "abc";
        char[] ch = {'a','b','c'};
        System.out.println(str);
        System.out.println(ch);
    }

     结果:可替代

abc
abc

    2、测试String类是否可变

 public static void main(String[] args) {
        String str = "abc";
        String t1 = str;
        str = "ab";
        String t2 =str;
        //假如String可变,t1=t2,反之,t1!=t2
        System.out.println(t1==t2);
    }
 public static void main(String[] args) {
        StringBuilder str = new StringBuilder("abc");
        StringBuilder t1 = str;
        StringBuilder t2 =str.append("d");
        //假如String可变,t1=t2,反之,t1!=t2
        System.out.println(t1==t2);
    }

    结果:不可变

false
true

二、String类常用构造

源码:

    public String() {
        this.value = "".value;
    }
    public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }
    public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }

    1、为何采用Arrays.copyof而非直接用this.value=value

        传递的value为可变对象,将this.value指向它时,则this.value失去不可变性,而Arrays.copyof采用浅复制,保留了this.value的不可变性

    2、源码复制过来一堆错?

        。。。。源码中很多东西,你是没有使用权限的

三、String类常用方法

源码:

    1、length()获取字符串长度

//其实就是获取char数组元素个数
public int length() {
        return value.length;
    }

    2、isEmpty()判断是否为空

//假如字符串为null,则无法使用
public boolean isEmpty() {
        return value.length == 0;
    }

    3、charAt(int i)获取指定位置字符

//返回字符数组指定元素
public char charAt(int index) {
        if ((index < 0) || (index >= value.length)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        retur
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值