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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张红伟 中级黑马   /  2013-9-28 19:29  /  1893 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-29 22:45 编辑

下面的程序片断中
String a = “ABCD”;
String b =a.toLowerCase();
b.replace(‘a’, ‘d’);
b.replace(‘b’,’c’);
System.out.println(b);
编译运行结果是什么
A.abcd
B.ABCD
C.dccd
D.dcba
E.编译错误
F.运行时抛出异常

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
运行结果为C选项,
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:
     String str = "abc";
等效于:
     char data[] = {'a', 'b', 'c'};
     String str = new String(data);
查阅API中String类的replace方法:
replace(char oldChar, char newChar)
          返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
前面的是原先的那个字符,被替换成后面的那个字符。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
String replace(char oldChar, char newChar)
Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar.

看了这段API文档,我想就没问题了吧,b虽然调用了replace,但是新的字符串没有被b接收,所以b还是原来的字符串,所以选A

点评

学习了,上面程序并没有打印出替换后的新的字符串。  发表于 2013-9-28 21:23

评分

参与人数 2技术分 +1 黑马币 +30 收起 理由
乔兵 + 1
gulup + 30 赞一个!

查看全部评分

回复 使用道具 举报 1 0
答案应该是A。简单说一下,我知道楼主疑惑在哪里,你没有真正理解“String类型的对象是不可改变的;一旦创建了一个字符串对象,它的内容是不能被改变的”这句话。String创建的是不可变字符串, 在java 中使用字符串最重要的一个规则必须记住,一个字符串对象一旦被创建,它的内容就是固定不变的。String是类类型变量,重新声明对象就会新建对象,比如String b =a.toLowerCase(); b 指向了一个新被创建字符串地址,字符串接收的字符是abcd,也就是a调用toLowerCase()方法得到的字符串。虽然b调用了replace方法,但调用完成后字符串b没有任何改变啊,它还在那里。

我的回答比较啰嗦,自己纯手打字,但是应该能给楼主启示!

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

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