A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

chyljy

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© chyljy 初级黑马   /  2012-6-17 11:37  /  1596 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s="hello";
String s1=s.replace('l','o');
替换后打印s结果为什么是hello而不是heooo?

7 个回复

倒序浏览

因为字符串s在初始化值后,值就不能改变,所以打印s的值仍是hello,而s1返回的是另一个新的字符串。
回复 使用道具 举报
字符串最大特点是一旦初始化就不会被改变,s还是指向了对象hello,替换后s1变化了
回复 使用道具 举报
replace()并没有把s指向新的引用,s=s.replace('l','o');这样才会变。
回复 使用道具 举报
本帖最后由 车风波 于 2012-6-17 11:59 编辑

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

            while (++i < len) {
                if (val[off + i] == oldChar) {
                    break;
                }
            }
            if (i < len) {
                char buf[] = new char[len];
                for (int j = 0 ; j < i ; j++) {
                    buf[j] = val[off+j];
                }
                while (i < len) {
                    char c = val[off + i];
                    buf = (c == oldChar) ? newChar : c;
                    i++;
                }
                return new String(0, len, buf);
            }
        }
        return this;
    }
这是replace()源码,并没有把s指向修改后的String

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
字符串类String对象的值是常量,一旦初始化是不能改变的
比如 String s = "hello";
那么s所指向的值是在内存中的一个地方,这个地方存放了字符串hello,这个字符串是常量,也就是说是不能被改变的。
并且,要清楚的是,上面的变量s只是一个引用,它的指向是可以改变的如下
String s = "hello";
s = "hello world";
这样 s 就指向了hello world,而hello 和 hello world这两个字符串是放在内存中的不同的地方的。
你用
s.replace('l','o');返回的s1是一个新的对象,这个新对象指向的内存单元的值是heooo,而 s 还是指向了原来的hello。
这样说不知道你明白了没?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
String s="hello";给s赋初值
String s1=s.replace('l','o'); 给s1赋初值,是将s中所有l换成o赋给s1
没有对s进行操作,所有没有改变.
String s=s.replace('l','o'); 才可以
回复 使用道具 举报
本帖最后由 晏文根 于 2012-6-17 12:12 编辑

我觉得很多问题,用内存解释真的很清楚,建议你也去学学内存这块知识,我正在进行中。。。。

String.PNG (15.83 KB, 下载次数: 16)

String.PNG
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马