谈谈我对java中的String.replace(char oldChar, char newChar)方法的理解

本文通过实例详细解析了Java中String类的replace方法的工作原理。解释了为何直接调用replace方法不会改变原始字符串,而是返回一个新的字符串对象。并提供了源码分析,帮助理解String对象的不可变性。
摘要由CSDN通过智能技术生成

首先我们来看一段代码

public class StringTest {
    public static void main(String[] args) {
        String str = "ABCDE";
        str.replace('A','F');
        System.out.println(str);
    }
}

执行输出结果如下:

ABCDE

我们发现虽然执行了str.replace(‘A’,‘F’),但是str中的A被替换为F,但是str的输出并没有改变。接着我们对代码进行修改:

public class StringTest {
    public static void main(String[] args) {
        String str = "ABCDE";
        String replacedStr = str.replace('A','F');
        System.out.println(replacedStr);
    }
}

执行结果如下:

FBCDE

我们发现将str.replace(‘A’,‘F’)赋值给String replacedStr,才能得到我们想要的替换后的结果,这是为什么呢?我们来看看replace方法源码:

public String replace(char oldChar, char newChar) {
        if (oldChar != newChar) {
            int len = value.length;
            int i = -1;
            char[] val = value; /* avoid getfield opcode */

            while (++i < len) {
                if (val[i] == oldChar) {
                    break;
                }
            }
            if (i < len) {
                char buf[] = new char[len];
                for (int j = 0; j < i; j++) {
                    buf[j] = val[j];
                }
                while (i < len) {
                    char c = val[i];
                    buf[i] = (c == oldChar) ? newChar : c;
                    i++;
                }
                return new String(buf, true);
            }
        }
        return this;
    }

源码中有一个return new String(buf, true),表示replace(char oldChar, char newChar)方法执行后返回的一个新的String类对象buf,至于原来的String类对象value是没有变。
总结replace方法:String类对象str执行replace方法后,str没做改变,执行replace方法后得到一个新的类,因此需要new一个新的String类对象replacedStr来承接replace方法的返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值