黑马程序员技术交流社区

标题: 一个小问题,求解答!!! [打印本页]

作者: 张红伟    时间: 2013-9-28 19:29
标题: 一个小问题,求解答!!!
本帖最后由 杨增坤 于 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.运行时抛出异常


作者: .只影、天涯.    时间: 2013-9-28 19:59
运行结果为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 得到的。
前面的是原先的那个字符,被替换成后面的那个字符。
作者: 冯晓骏    时间: 2013-9-28 19:59
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
作者: cena约翰塞纳    时间: 2013-9-29 22:36
答案应该是A。简单说一下,我知道楼主疑惑在哪里,你没有真正理解“String类型的对象是不可改变的;一旦创建了一个字符串对象,它的内容是不能被改变的”这句话。String创建的是不可变字符串, 在java 中使用字符串最重要的一个规则必须记住,一个字符串对象一旦被创建,它的内容就是固定不变的。String是类类型变量,重新声明对象就会新建对象,比如String b =a.toLowerCase(); b 指向了一个新被创建字符串地址,字符串接收的字符是abcd,也就是a调用toLowerCase()方法得到的字符串。虽然b调用了replace方法,但调用完成后字符串b没有任何改变啊,它还在那里。

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2